<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<ul>
Sisukord
<li>1 N&auml;dal 5.-11. september
<li>1.1 7. september
<li>1.2 10. september
<li>2 N&auml;dal 12.-18. september
<li>2.1 12. september
<li>2.2 13. september
<li>2.3 14. september
<li>2.4 15. september
<li>2.5 16. september
<li>2.6 17. september
<li>3 N&auml;dal 19.-25. september
<li>3.1 19. september
<li>3.2 22. september
<li>3.3 23. september
<li>3.4 24. september
<li>3.5 25. september
<li>4 N&auml;dal 26. september - 2. oktoober
<li>4.1 26. september
<li>4.2 28. september
<li>4.3 29. september
<li>4.4 1. oktoober
<li>4.5 2. oktoober
<li>5 N&auml;dal 3. oktoober - 9. oktoober
<li>5.1 3. oktoober
<li>5.2 4. oktoober
<li>5.3 5. oktoober
<li>5.4 6. oktoober
<li>5.5 7. oktoober
<li>5.6 8. oktoober
<li>5.7 9. oktoober
<li>6 N&auml;dal 10. oktoober - 16. oktoober
<li>6.1 10. oktoober
<li>6.2 11. oktoober
<li>6.3 12. oktoober
<li>6.4 13. oktoober
<li>6.5 14. oktoober
<li>6.6 16. oktoober
<li>7 N&auml;dal 17. oktoober - 23. oktoober
<li>7.1 17. oktoober
<li>7.2 18. oktoober
<li>7.3 19. oktoober
<li>7.4 20. oktoober
<li>7.5 21. oktoober
<li>7.6 23. oktoober
<li>8 N&auml;dal 24.-30. oktoober
<li>8.1 24. oktoober
<li>8.2 25. oktoober
<li>8.3 27. oktoober
<li>8.4 28. oktoober
<li>8.5 29. oktoober
<li>8.6 30. oktoober
<li>9 N&auml;dal 31. oktoober - 6. november
<li>9.1 31. oktoober
<li>9.2 1. november
<li>9.3 2. november
<li>9.4 5. november
<li>9.5 6. november
<li>10 N&auml;dal 7.-13. november
<li>10.1 7. november
<li>10.2 8. november
<li>10.3 9. november
<li>10.4 10. november
<li>10.5 11. november
<li>10.6 13. november
<li>11 N&auml;dal 14.-20. november
<li>11.1 14. november
<li>11.2 15. november
<li>11.3 16. november
<li>11.4 17. november
<li>11.5 18. november
<li>11.6 19. november
<li>11.7 20. november
<li>12 N&auml;dal 21.-26. november
<li>12.1 21. november
<li>12.2 Eelv&otilde;istlus (24. november)
<li>12.3 Robotex (26.-27. november)
</ul>
N&auml;dal 5.-11. september

[redigeeri] 7. september
Raimond: K&auml;isime Hartiga robotit &uuml;le vaatamas. Leidsime, et on vaja teha kindlasti j&auml;rgnevaid asju:
Padjaga juhtmehoidjad - Roboti sisemuses on juhtmed suhteliselt sassis ja nigelad. Vaja oleks nad kinnitada roboti seinte k&uuml;lge ja teha m&otilde;ned kulunumad juhtmed uued kah.
Kaane peale karbikene - Kaane alla on teibitud / liimitud / kruvitud elektroonikakomponente ja juhtmeid. Sinna tuleks teha karp, kus sees toimub kaane k&uuml;ljes olevatele komponentidele 12V ja 5V jagamine ning LED-ide voolu kontrolliv loogika. Arvame, et &uuml;ritame teha sinna ise LED-ide kontrollimiseks plaadi, et &otilde;ppida s&ouml;&ouml;vitamist. Ehk siis, karbi sisse: kaanel&uuml;litite juhtmed, 12V -> 5V lineaarne regulaator, LED-ide l&uuml;litamine.
Uus Coilgun'i (ELMA) plaat.
Kaane ja roboti vaheliste juhtmete koondamine &uuml;heks vastupidavaks juhtmeks.
[redigeeri] 10. september
Raimond: Vaatasin &uuml;le vanad failid ja skeemid. Koostasin programmeeritud juhtimisloogika p&otilde;hjal plokkdiagrammi, mis kirjeldab roboti k&auml;itumisalgoritmi v&otilde;istlusel. Samuti disainisin &uuml;mber elektroonika / komponentide skeemi, sest nii m&otilde;nedki asjad olid seal muutunud. Skeemid said &uuml;les pandud GoogleDocs'i, enne avaldamist teistele &uuml;levaatamiseks. Tegin samuti ka SVN-i repo, kuid commitimisega on hetkel probleeme.
Tegin tasklisti lehe ja taskid GoogleDocsi tehtud failide &uuml;levaatamiseks ja muudeks asjadeks.
Otsustasime Ordi l&auml;pakale panna peale Linuxi. T&otilde;mbasin Kubuntu ja kirjutasin plaadi. Seej&auml;rel avastasin, et l&auml;pakal pole CD-ROM draivi... :(
Sain l&otilde;puks SVN importi tehtud. Lasin k&uuml;ll hunniku mitte-vajalikke faile &uuml;les, kuid TortoiseSVN ei andnud v&otilde;imalust failide selekteerimiseks. Arvan, et sellest pole praegu hullu, koodi ja muud failid saab k&auml;tte. Invaitisin k&otilde;ik tiimiliikmed ka ja andsi neile &otilde;igused repo kasutamiseks.
SVN repo aadress:
https://subversion.assembla.com/svn/sidi/
[redigeeri] N&auml;dal 12.-18. september

[redigeeri] 12. september


ATmega 328P-PV


Blinkimine uue ATmegaga


Juhe juhtmeklambris
Raimond: K&auml;isin Oomipoes ATmegal j&auml;rel.
Enne ja p&auml;rast koosolekut tegelesin Kubuntu installeerimisega Ordi l&auml;paka peale. Paistab, et Linuxi screenshot ei ole korralikult m&auml;lupulgale salvestunud. Sain igatahes enda m&auml;lupulga tehtud bootitavaks ja sealtpealt Kubuntu NetInstalli bootitud. Paigaldamise v&otilde;ib edukaks lugeda, kuid seadistamine on veel pooleli, sest hetkel oli tiba aeglane... Tuleb veel proovida C# koodi seal peal kompilleerida. Hetkel paistab &uuml;ks lahendus olevat Mono CSharp Compiler. Toda tuleb l&auml;hiajal katsetada.
Windowsi bootimine tundus ka isegi t&ouml;&ouml;tavat p&auml;rast Linuxi installi, kuigi kartsime, et Windowsi mbr l&auml;heb katki.
Harti paigaldas Arduinole uue ATmega ja testisime toda. Kuumaks ei l&auml;inud ja p&auml;rast pusimist AVR ISP-iga sain bootloaderi ka sinna peale ning Blink example'i t&ouml;&ouml;le.
P&auml;rast ATmega paigaldamist uuris Harti ka robotis olevaid juhtmeid ning pani roboti seinte k&uuml;lge klambrid juhtmete jaoks, et nad igal pool keskel laiali ei oleks. Homme (enne Harti &auml;ras&otilde;itu n&auml;dalaks Šveitsi) vahetame osa juhtmeid &uuml;mber ka.
Arutasime 3D mudelifailide loomist, otsustasime Ardo k&auml;est k&uuml;sida vanad SolidEdge'i failid ja siis T&otilde;nis teeb need &uuml;mber (koos t&auml;iendustega) SolidWorksi, kuna nii ei ole vaja uuesti robotit t&auml;ielikult &uuml;le m&otilde;&otilde;ta.
[redigeeri] 13. september
Raimond: Lisasin GoogleDocsis arenduses olnud skeemid blogisse meeskonna lehele.
Laboris hakkasime tegelema T&otilde;nisega 3D jooniste koostamisega, m&otilde;&otilde;tes robotit &uuml;le ja kasutades kohati ka vanu SolidEdge faile. Mudeli koostamisel saime tehtud p&otilde;hjaplaadi, mootorid, rattad, seinad, coilguni m&auml;hise. T&ouml;&ouml; veel j&auml;tkub.


Lubuntu install


Janno seletab SolidWorksi


Uus rulliku mootori juhe
Kuulasime ka poole k&otilde;rvaga Janno loengut SolidWorksist.
Harti parandas ja korrigeeris robotis olevaid juhtmeid. N&auml;iteks rulliku mootori juhe sai uus pandud.
Abivalmid inimesed digilaboris &uuml;tlesid, et Kubuntu ei ole &uuml;ldse light-weight ja soovitasid hoopis Lubunutut. Installisin Linuxi uuesti.
Koostasin ka Visios skeemi, kus lisaks elektroonika-komponentidele on ka mehaanika-komponedid peal. Panin GoogleDocsi meeskonnasiseseks &uuml;levaatuseks.
T&otilde;nis: Tegin coilgun'i m&auml;hisest 3D mudeli.
[redigeeri] 14. september
Raimond: Installisin SVN-i halduseks RabbidVCS-i. C# jaoks &uuml;lalnimetatud Mono. RabbidVCS-iga sain kenasti SVN-ist koodi k&auml;te ja Mono avas ilusasti projekti. Kahjuks kompileerimisel tuli veateade .NET 4.0 Frameworki mitteleidumise kohta. Selgus, et MonoDevelop 2.4, mida Ubuntule pakuti, ei toeta veel 4.0-i. Seega &uuml;ritan selle skriptiga installida uuemat Mono versooni.
Avastasin, et rulliku juhe on valetpidi joodetud. Aku k&uuml;lge &uuml;hendades ja vool sisse lastes k&auml;ib rullik valetpidi.
V&otilde;tsin r&uuml;peraali koju kaasa, et Mono 2.8 installi j&auml;tkata.
T&otilde;nis: J&auml;tkasin 3D mudeli valmistamist: m&otilde;&otilde;tsin juppe robotilt ning valmistasin vastavad 3D mudelid SolidWorks 2010-2011's.
[redigeeri] 15. september
Raimond: Sain installitud Mono 2.10.6 Lubuntu peale ja enam ei tulnud viga, et .NET 4.0 Framework not found. Hetkel tuli viga, et the type or namespace name ´Composition´ does not exist..., mis t&auml;hendab, et Mono ei saa MEF-i k&auml;tte, kuigi Mono 2.8 release notes'i j&auml;rgi peaks MEF alates olemas olema. Package'ite all ma toda ei leidnud ning t&otilde;mmates MEF-i, ei osanud teda korralikult praegu lisada... n&auml;dalavahetusel uurin asja edasi.
Harti sai valmis LED-ide plaadi disaini ja saatis selle e-mailile. Hetkel vaatame toda &uuml;le...
T&otilde;nisel edeneb roboti 3D mudel, t&otilde;en&auml;oliselt t&auml;na valmib. N&auml;dalavahetusel vaatame &uuml;le ja lisame wikisse.
T&otilde;nis: 3D mudeli valmimine edeneb, m&otilde;&otilde;tsin ja konstrueerisin SolidWorks'is sisemisi detaile (tr&uuml;kkplaadid).
[redigeeri] 16. september
T&otilde;nis: M&otilde;&otilde;tsin laboris veel tegemata jupid &uuml;le, ning tegin kiired visandid koos m&otilde;&otilde;tmetega, seej&auml;rel tegin kodus need SolidWorks'is valmis. T&auml;ielikust 3D mudelist on veel puudu s&uuml;learvuti roboti kaane pealt ning paar pisemat detaili. &Uuml;ritan mitte meelest lasta, et homme failid &uuml;les laadida.

Raimond: Sain System.ComponentModel.Composition teegi lisatud ja kood kompileerus &auml;ra, kuid veel on probleeme... Installin OpenCV ja EmguCV &auml;ra.
Sain EmguCV k&uuml;lge ja OpenCV pathi Lubuntu ld.so.config faili &auml;ra lisatud. MainForm.Design.cs failist tuli paar rida v&auml;ljakommenteerida, sest need andsid ka veateateid. Eks p&auml;rast ole n&auml;ha, kas l&auml;ks midagi katki...
[redigeeri] 17. september
Raimond: Hetkel j&auml;i probleem selle juurde, et Robin.ControlPanel'i rida 137, mis v&otilde;tab Controllers kaustast kontrollerite DLL-e, ei saa kausta k&auml;tte. Veateade n&auml;itab all-caps path'i ja &uuml;tleb, et toda pole olemas, kuigi tegelikult on. V&otilde;imalik, et see on sellep&auml;rast, et Linux kipub olema case-sensitive. Samas ma ei tea, kas see all-caps on ainult erindi kuvamisel v&otilde;i otsibki ta t&otilde;esti s&auml;&auml;rast aadressi.
Harti: tegin Yenkas toiteahela kaaneplaadi skeemi valmis.
[redigeeri] N&auml;dal 19.-25. september

[redigeeri] 19. september
Raimond: Lisasin wiki pealehele GoogleDocsis &uuml;levaatamisel olnud roboti p&otilde;hikomponentide skeemi, mida n&otilde;udis Moodle'i &uuml;lesanne 2.
V&otilde;tsime hetkel DLL-ide kausta brausimise &auml;ra. J&auml;rgnev probleem tuli kaamerast/failist pildi saamisel. Kaamera cheese'iga t&ouml;&ouml;tab ja saab ka meie koodiga &uuml;henduse (sinised tuled l&auml;hevad p&otilde;lema), aga kaadri v&otilde;tmisel saame veateate:
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an  object
  at Emgu.CV.Capture.Grab () [0x00000] in <filename unknown>:0 
  at Emgu.CV.Capture.QueryFrame () [0x00000] in <filename unknown>:0 
  at Robin.VideoProcessor.VideoFeed2.Query () [0x00000] in  /home/robin/Robin/Robin/trunk/Laptop/Robin.VideoProcessor/VideoFeed.cs:94
Failist kaadri v&otilde;tmisel ilmneb sama veateade. Faili aadress on &otilde;ige.
Lisasin valminud 3D mudeli pildi wiki lehele.
Koduse &uuml;lesande osas leidsime, et ei oma otstarvet teha mehaanika komponentide loetelu veel eraldi (skeemil on need olemas) ning mehaanika flow'd, sest otseselt mehaanika valmistamist meil planeeritud ei ole, kuna see sai eelmine aasta tehtud.


Hetkel Lubuntus olev GUI
Harti: M&uuml;&uuml;sin roboti seest 100 Euroga maha SSRi, mida me mullu kasutasime, aga t&auml;navu mitte.
[redigeeri] 22. september
Raimond: Tegin VideFeed2.Query'le try-catch bloki, et kui capture.QueryFrame annab erindi, siis tagastatakse t&uuml;hi pilt. V&otilde;ttes ka MainVideoProcessor.cs'ist &auml;ra ProcessFrame kutse, sain GUI ette Lubuntus... QueryFrame ja ProcessFrame tuleks korda saada...


Robini GUI on &auml;ra s&ouml;&ouml;nud 87.9% Lubuntu m&auml;lust ja kohe paneb Lubuntu ta kinni.
Leidsime T&otilde;nisega, et praegune GUI, mis on tehtud Windows.Forms'i kasutades, on Linuxi peal v&auml;ga kohmakas ja aeglane. Samuti Lubuntu peal miski lekkis m&auml;lu, kui panin GUI-st Connect Arduinoga l&auml;bi USB. M&auml;lulekke tagaj&auml;rjel programm sulgus m&otilde;ningase aja p&auml;rast. Sellest l&auml;htuvalt otsustasime teha Linuxi jaoks uue GUI kasutades GTK#-i. Hetkel MonoDevelop veits t&otilde;rkus tollega GUI tegemisel, kuid muidu tundub normaalne lahendus olevat. Loodame, et selle peale l&auml;heb paar p&auml;eva.
Huvitav oli see, et T&otilde;nise Ubuntu peal &uuml;lalkirjeldatud capture.QueryFrame() erindit ja muid ei tulnud.
Avastasin, et Arduinole ei saa USB-ist uut sketchi peale saata, kui Tx/Rx Mootorite Plaadiga &uuml;hendatud on. Kuidagi veider... minu meelest vanasti ikka sai. V&otilde;ib-olla m&auml;letan valesti.
Hartiga avastasime, et roboti alumisel korrusel olev 5V pingeregulaator on t&otilde;en&auml;oliselt l&auml;bi l&auml;inud.
Harti: Tegin ostu, ostsin karbi, aga karp on 2mm liiga paks. &Auml;kki paneks ta katusele?
Panin triblaja mootori &otilde;iget pidi k&auml;ima.
Kakkusin l&ouml;&ouml;gimehhanismi vana toiteplaadi ja juhtmed robotilt maha.
selgus, et toitejuhe on kusagilt katki.
5V oli muutunud 0,75V-ks
[redigeeri] 23. september
T&otilde;nis: tegelesin MonoDevelop's GUI tegemisega, mis v&otilde;taks v&otilde;ibolla v&auml;hem ressursse, kui praegune GUI, kus on liiast &uuml;learust kraami sees. Vaja veel lisada GUI elementidele funktsionaalsus.
[redigeeri] 24. september
Harti: k&auml;isin digilaboris elmak&otilde;sile juppe hankimas, plaadi sain, muid komponente mitte, need saan hommikul.

[redigeeri] 25. september
Harti: jootsin t&auml;na meie elektrilisele pallil&ouml;&ouml;jale juhtplaati. Pisikesed pindjoodetavad komponendid said k&uuml;lge, peale 10nF kondeka ja pingem&otilde;&otilde;tmise takisti (esimest ei olnud ja teist ei teadnud). Osa juppe v&otilde;tsin meie vana plaadi pealt, sest olid puudu. N&auml;it. &uuml;ks t&auml;ppistakisti v&otilde;i 10pF kondekas.


nendega, oli see probleem, et kirjad transistoril ei aita otseselt teda identifitseerida.
[redigeeri] N&auml;dal 26. september - 2. oktoober

[redigeeri] 26. september
Raimond: 1.27mm piikribad Coili plaadile tulevad t&otilde;en&auml;oliselt j&auml;rgmise n&auml;dala (oktoobri) alguses &uuml;histellimusega. Vajadusel saab ka tellida Elfa-st: emane, isane
[redigeeri] 28. september


Nupuvajutusel paisatakse konsooli teade


Handler n&auml;eb selline v&auml;lja


Handleri saab evendile m&auml;&auml;rata Design vaatest
Raimond: Sain Laurilt Coili plaadi jaoks trafo ja 2.49K takisti. Panin m&otilde;lemad eraldi v&auml;iksemasse Elfa kotti, mis asub Coili plaadi koti sees.
&Uuml;hendasin Marti ja T&otilde;nise tehtud koodid. L&auml;ks suht palju aega aru saamiseks, et disaine hoitakse gtk-gui kaustas gui.stetic failis XML kujul. K&uuml;sisin T&otilde;niselt enne tehtud GUI failid, sest need polnud kohe SVN-i l&auml;inud. Seej&auml;rel uurisin Marti tehtud faile ja t&otilde;stsin neid projekti juurde. Hetkel kaameraga veel testida ei j&otilde;udnud, kuid sain asja nii kaugele t&ouml;&ouml;le, et p&otilde;hiliidesest "Show Video" vajutades kutsutakse v&auml;lja Marti tehtud WindowVideo aken, kus peaks video jooksma. Hetkel k&uuml;ll tuli erind, sest kaamerat polnud k&uuml;ljes... Aga &uuml;ldiselt ma usun, et t&ouml;&ouml;tab.
Hetkel on probleeme selle SVN-i commitimisega. &Uuml;ritan homse p&auml;eva jooksul korda saada.
[redigeeri]29. september
Raimond: Uurisime ja proovisime T&otilde;nisega, kuidas GUI elemente interaktiivseks teha. Arduino Serial connect nupp sai enam-v&auml;hem valmis. Edasi struktureerisin SVN-is koodi &uuml;mber. Kuna mingid vead olid sees, siis nende parandamiseks tuli ligi 10 committi, sry... N&uuml;&uuml;d peaks siis igal juhul olema struktureeritud nii:
-Robin (projekti nimi)
--trunk
   ... (p&otilde;hifailid)
--branches
   ... (erinevad katsetused nagu konsoolirea rakendus jm)
Seej&auml;rel &uuml;ritasin videopilti t&ouml;&ouml;le saada, kuid esines t&auml;pselt sama viga, mis varemgi. Nii kaamera kui ka faili puhul tuleb nullviida erind viimase kuva j&auml;rgi Emgu.CV.Captuŕe.Grab()-ist. Postitan kogu v&auml;ljundi siia:
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
Exception in Gtk# callback delegate
  Note: Applications can use GLib.ExceptionManager.UnhandledException to handle the exception.
System.NullReferenceException: Object reference not set to an instance of an object
  at Emgu.CV.Capture.Grab () [0x00000] in <filename unknown>:0 
  at Emgu.CV.Capture.QueryFrame () [0x00000] in <filename unknown>:0 
  at Robin.GolfVision.Vision.UpdateFromVideoSource () [0x00000] in  /home/robin/Robin/trunk/Laptop/Robin.GolfVision/Vision.cs:47  
  at Robin.GolfVision.Vision.UpdateAndProcessFrame () [0x00000] in /home/robin/Robin/trunk/Laptop/Robin.GolfVision/Vision.cs:75 
  at WindowVideo.OnIdle () [0x00000] in /home/robin/Robin/trunk/Laptop/Robin.ControlPanel/WindowVideo.cs:48 
  at GLib.Idle+IdleProxy.Handler () [0x0000c] in /home/robin/mono-src/gtk-sharp/glib/Idle.cs:73 
   at GLib.ExceptionManager.RaiseUnhandledException(System.Exception e, Boolean is_terminal) in  /home/robin/mono-src/gtk-sharp/glib/ExceptionManager.cs:line 58 
  at GLib.Idle+IdleProxy.Handler() in /home/robin/mono-src/gtk-sharp/glib/Idle.cs:line 78
   at Gtk.Application.gtk_main()
   at Gtk.Application.Run() in /home/robin/mono-src/gtk-sharp/gtk/Application.cs:line 135
   at Robin.ControlPanel.Program.Main() in  /home/robin/Robin/trunk/Laptop/Robin.ControlPanel/Program.cs:line 25 
The application was terminated by a signal: SIGHUP
See on hetkel, siis kaamerast pildi v&otilde;tmisega. &Uuml;lemiste teadete kohta &uuml;tleb see koht, et v&otilde;ivad olla Logitechi kaamera t&otilde;ttu (OpenCv pidavat kasutama Video4Linux draivereid, mis m&otilde;ndade Logitechi kaameratega ei istu). Samas proovisin ka r&uuml;peraali peal oleva veebikaga ja tollega on t&auml;pselt sama lugu. Logitechi kaameral l&auml;hevad korraks tuled p&otilde;lema ja siis programm crashib.
Faili katsetades peaks failinimi &otilde;ige olema, sest seda muutes valeks tuleb unable to create capture from xxx. EmguCV Grab meetod n&auml;eb v&auml;lja j&auml;rgnev:
public virtual bool Grab()
     {
        bool grabbed = CvInvoke.cvGrabFrame(_ptr);
        if (grabbed) ImageGrabbed(this, new EventArgs());
        return grabbed;
     }
CvInvoke'i kutsutakse juba varem v&auml;lja, seega v&otilde;iks loota, et OpenCv on ikka olemas tal.


Harti on vahepeal tegelenud Coili plaadiga. Pooled komponendid on joodetud.
Proovisin Emgut uuesti installida... Seekord .deb paketi kaudu otse. Selle puhul &uuml;ks assembly eba&otilde;nnestus:
Failure adding assembly /usr/lib/cli/emgucv-2.3/Emgu.CV.OCR to the cache: The system cannot find the  file specified.
Assemblies processed = 7
Assemblies installed = 6
Failures = 1
dpkg: error processing emgucv-x86-tbb (--install):
Praegune Emgu on mul r&uuml;peraali peal kompilleeritud kasutades toda juhendit.
Uurime seda probleemi edasi...

[redigeeri] 1. oktoober


Kaamerast tuleb n&uuml;&uuml;d pilt k&auml;tte. Pildil on r&uuml;peraali enda veebikaamerast tulnud pilt.
Raimond: K&auml;isin p&auml;eval laboris ja panin r&uuml;peraalile peale TeamViewer'i, mida kasutades sai Marti eelnevalt kirjeldatud EmguCV probleemi uurida. Selgus, et olin installeerinud ebastabiilse buildi. Tollele oli hiljuti tulnud ka parandus, kuid olin kompilleerinud asja enne paranduse v&auml;ljatulekut. T&otilde;en&auml;oliselt v&otilde;iks mingi aeg Emgu uuesti kompilleerida, kuid seni t&ouml;&ouml;tab Marti lisatud parandus, mis lisab ImageGrabbed eventile p&auml;rast Capture klassi loomist t&uuml;hja event handleri.
capture.ImageGrabbed += (x,y) => {};
N&uuml;&uuml;d igatahes tuli pilt v&auml;hemalt l&auml;paka peal olevast kaamerast kenasti k&auml;tte ja isegi kohatine oranžide blobide detection paistis t&ouml;&ouml;tavat. Homme tuleks proovida ka &otilde;ige veebikaameraga...
[redigeeri] 2. oktoober
Harti: Meie elektrilise pallil&ouml;&ouml;ja juhtplaat on valmis, joota on veel 2 pistikut. Need pidada homme j&otilde;udma.
5V stabilisaatori panin uue. Seekord pistikuga, nii et joota pole enam vaja. &Uuml;ks 7805 kivi on igaks juhuks veel kapis varuks.
tr&uuml;kkisin toite- ja lediplaadi skeemi kilele, loodan et s&ouml;&ouml;vitamiseks l&auml;heb juba homme.
Raimond: Tegime T&otilde;nisega WindowMain funktsionaalsust edasi. Keskendusin suuresti KeyboardControlleri tegemisele, see v&otilde;imaldab klaviatuuriga saata robotile liikumisk&auml;ske. Klaviatuurilt nupuvajutuse lugemine ja vastava liikumisk&auml;su saatmine sai valmis. Samuti implementeerisime Serial portide loendi ja Connect nupu funktsionaalsuse &auml;ra. Esines vahepeal nii mitmeidki vigu... Hetkel j&auml;ime sellise vea juurde, kus Arduinole saadetakse arvutist andmeid ja Arduino andmete saatmise tuluke ka vilgub, kuid r&uuml;peraal ei saa andmeid k&auml;tte. Pordile dataReveived-i lisatud handlerit ei kutsuta millegip&auml;rast v&auml;lja (seal olev Console.WriteLine ei v&auml;ljasta midagi).
Saatsin koodi Martile &uuml;levaatamiseks.
Jooksvate &uuml;lesannete kohta:
Mootorite plaat kokku joota - Jootsime selle asemel Coili plaadi.
V&otilde;istlus simulaatoris - Kui T&otilde;nisel homme GUI funktsionaalsuse progremise k&otilde;rvalt aega on, siis tegeleme. Hetkel on prioriteet saada komponendid omavahel suhtlema.
V&auml;ravate ja v&auml;ljaku servade tuvastamine - On olemas, kuid kuna komponendid omavahel v&auml;ga suhelda veel ei oska, siis ei saa n&auml;idata. V&auml;ravate ja v&auml;ljaku servade tuvastus paikneb eelmisest aastast p&auml;rit alamprojektis Robin.VideoProcessor. Selle aasta Marti poolt tehtud edasiarenduses Robin.GolfVision veel ei ole.
Mehaanika valmis - Mehaanika otseselt on valmis. Teatud mehaanilisi elemente lisame veel juurde (n&auml;iteks karp, kuhu sisse paneme varsti s&ouml;&ouml;vitatava plaadi)
[redigeeri] N&auml;dal 3. oktoober - 9. oktoober

[redigeeri] 3. oktoober


Pordi kuulamine mingil m&auml;&auml;ral t&ouml;&ouml;tab
Raimond: Sain pordist info vastuv&otilde;tmise probleemi mingil m&auml;&auml;ral lahendatud. Lugesin sellelt lehelt, et Linuxi peal SerialPorti evente (n DataReveiced) ei kutsutagi. Seega tegin tavalise SerialPortist lugemise, mida kutsutakse MainLogicWorkerOnDoWork sees olevas ts&uuml;klis. Hetkel ei ole probleem veel t&auml;ielikult lahendatud, sest saan Arduinost seriali kaudu n&uuml;&uuml;d sellise jada:
2013106890000000166255
See aga ei vasta meie struktuurile, kus esimesel kohal peaks olema D=68. Samas GUI aknasse D paisatakse. T&otilde;en&auml;oliselt hetkel j&auml;&auml;b midagi siin lihtsalt m&auml;rkamata, sest terve &otilde;htu selle pordist lugemise t&ouml;&ouml;lesaamisega tegelenud.
Porti saatmine tundub ka veidike kahtlane, sest s&otilde;itmise k&auml;skude peale mootorid mingit elum&auml;rki ei n&auml;idanud. Samas PID miskitmoodi toimib (kui h&auml;sti palju rattaid &uuml;hes suunas keerata, siis hakkavad aeglaselt tagasi s&otilde;itma).
Marti l&auml;ks kuskile Arduino workshopile. Hartiga koos &uuml;risime LED-ide plaati s&ouml;&ouml;vitada... :P
T&otilde;nis: programmeerisin GUI paremaks (et n&auml;itaks ainult USB porte). Lisaks uurisin kuidas parandada meie TextView stack overflow probleemi.
[redigeeri] 4. oktoober


Puur laperdab ja me ei saanud sellega auke tehtud
Raimond: Harti s&ouml;&ouml;vitas LED-ide ja voolu juhtimise plaati edasi. &Otilde;igemini s&ouml;&ouml;vitamise juurde j&otilde;udsimegi. Me t&auml;pselt ei teadnud, mis temperatuuri juures peab lahus olema ja kui kaua umbes hoida jne. &Otilde;nneks Erik Ilbis aitas meid natuke ja viisime s&ouml;&ouml;vitamise protsessi l&otilde;puni. Vahepeal ei tahtnud teatud radade vahelt vask &auml;ra tulla ja &auml;&auml;rtest hakkas juba tulema sealt, kust polnud vaja. T&otilde;en&auml;oliselt oli asi selles, et me printisime kilele kolm korda ja viimane l&auml;ks veidi nihkesse. N&uuml;&uuml;d teame, et piisab kahest korrast (&uuml;ks kord on digilabori printeriga natuke liiga v&auml;he, tahm j&auml;i auguline).
Plaadil oli ka kuskilt tulnud kriim, seega tegime igaks juhuks Elfast ostetud PCB markeriga m&otilde;ned kohad &uuml;le. P&auml;rast oli probleeme markeri maha saamisega, sest selgus, et laboris ei olnud atsetooni (v&otilde;i v&auml;hemalt meie ei leidnud) ja tehniline piiritus ei aidanud. Harti &uuml;tles, et ta t&ouml;&ouml;l v&otilde;tab markeri maha.
Teine probleem tekkis puurimisega, nimelt puuri tera laperdas suht palju ja seega otsustasime, et Harti puurib augud kodus &auml;ra.


Plaat k&auml;is lahuses &auml;ra, lahus t&otilde;mbus siniseks


Harti l&otilde;ikab skalpelliga radu lahti


Radade lahtil&otilde;ikamisel v&otilde;tsime appi mikroskoobi
Harti: pallil&ouml;&ouml;ja juhtplaat on n&uuml;&uuml;d valmis.
[redigeeri] 5. oktoober
Harti:
v&otilde;tsin vastu otsuse, et esimene vasikas l&auml;ks aia taha ja tuleb uus ledi- ja toiteplaat teha. Selle rajad on liiga &auml;ra s&ouml;&ouml;binud, nii et neid tuleb p&auml;ris palju tina ja traadiga parandada. Lisaks peaks m&otilde;ningaid disainivigu parandama, nii pean m&otilde;istlikuks uus plaat teha.
uurisin dokumentatsiooni ja praktilisi n&auml;iteid, et "coili"plaadile juhet teha. juhtme j&otilde;udsin &auml;ra koorida ja pistikud valmis l&otilde;igata, aga 15 min j&auml;i puudu. Joota veel ei j&otilde;udnud. &Uuml;lehomme saab ka see tehtud.
[redigeeri] 6. oktoober


Optokatkesti lugemine, vahepeal takistasin optokatkestit (mingil p&otilde;hjusel loetakse ka Power True'ks)
Raimond: Sain Arduino ja Laptopi vahel paketid vahetuma. Laptopi poole pealt oli viga selles, et kontrollisin, et kui j&auml;rgnev bait on 255, siis l&otilde;peta suhtlus ja v&auml;ljasta pakett, kuid tegelikult tuleks kontrollida, kas tulid &uuml;ksteise j&auml;rel baidid 13 ja 10 (\r ja \n), sest just neid saadab Arduino paketi l&otilde;pus.
Arduino poolele vead j&auml;id. Sain hetkel nii kaugele, et ilma WireSender ja WireReceiverita t&ouml;&ouml;tab rulliku ees oleva optokatkesti lugemine. Mingil p&otilde;hjusel loetakse p&auml;rast optokatkesti True'ks olemist ka Power True'ks... Kuigi mul pole vastavasse pinni midagi &uuml;hendatud. Tuleb veel uurida, kas kuskil koodis m&auml;&auml;ratakse Power automaatselt t&otilde;eseks, pakettide kirjutamine/vastuv&otilde;tmine on endiselt vigane v&otilde;i on tegu m&otilde;ne elektroonikaveaga (proovisin hetkel m&otilde;lema Arduino plaadiga).
Veel tegin korda GTK TextView probleemi. Vastavalt sellele postitusele ei tohi GTK elementide sisu muuta teises Threadis (kus GTK ei ole k&auml;ivitatud). Selle lahendamiseks tuli saata:
Gtk.Application.Invoke( delegate{ //muutmised } )


Optokatkesti lugemine tundub n&uuml;&uuml;d parem, Power j&auml;&auml;b False.
Lisaks sai tehtud see, et GUI received lahtrisse ei pilluta kogu aeg igat k&auml;sku, vaid alles selline Arduinost tulnud k&auml;sk, mis erinest eelmisest.
Avastasin ka, et kaane all olev pingeregulaator on l&auml;bi l&auml;inud. V&otilde;i v&auml;hemalt tuleks seda testida, sest &uuml;hel hetkel Power nupp ei t&ouml;&ouml;tanud korralikult ja pingeregulaatorilt 5V jala pealt pinge m&otilde;&otilde;tmine andis ligikaudu 0.30V. Lisaks oli regulaator suhteliselt tuline.
Tegin ka &uuml;le pika aja &uuml;he juhtme. Musta, millega Arduino maa on &uuml;hendatud 5V jaoturiga. Senikauaks kuni &uuml;levalt karbist tulevat 5-pinnist juhet veel pole.
Edit: Karl Tarbe veidi aitas ja &uuml;tles, et kui pinni k&uuml;lge pole midagi &uuml;hendatud, siis v&otilde;ib sealt tulla nii High kui ka Low lugem. Seega &uuml;hendasin hetkel mitte-t&ouml;&ouml;tava nupu sinna k&uuml;lge ja n&uuml;&uuml;d enam seda imeliku Power v&auml;&auml;rtusega probleemi pole.
Sain vist WireSenderi ja WireReceiveri ka mingil moel t&ouml;&ouml;le, aga tuleb millalgi n&uuml;&uuml;d uurida Mootorite Plaadi koodi, kas temani ka k&auml;sud j&otilde;uavad ning mis probleemid Arduino koodis ikkagi olid...
[redigeeri] 7. oktoober
Raimond: Lugesin muu hulgas seda threadi ja panin Coili plaadil oleva Atmega88 peale Arduino Atmega8 kaustas oleva bootloaderi. Pinnide kaarti hetkel &uuml;les ei leidnud, kuid eelmise aasta koodist vaadates on PLUNGER sama.
#define plunger 2 // PD2
Too pin t&ouml;&ouml;tas, kui saatsin PLUNGERI pinnist v&auml;lja 1.5 sekundi tagant 5V. Hiljem postitan pilte ja juhiseid edasiseks...


Harti s&ouml;&ouml;vitab plaati uuesti
Arduino IDE-ga AVR ISP-i kasutamiseks tuli installida libUSB. Tolles failis oli mingi filter, mis jutu j&auml;rgi v&otilde;imaldas seadmel kasutada Arduino jaoks vajalikku API-t ilma muude draiverite maha laskmiseta. Seega loodetavasti ei ole toda probleemi, mis eelmine aasta juhtus, et p&auml;rast enam AVR Studio ei t&ouml;&ouml;tanud, sest USB draiverid l&auml;ksid konflikti vms...
Harti s&ouml;&ouml;vitas uut LED-ide ja toiteplaati, kuid too ei tulnud &uuml;ldse v&auml;lja. Kalle soovitas, et UV lambi all oli liiga v&auml;he aega. Igatahes s&ouml;&ouml;vitamisel ujusid rajad ka &auml;ra.


Harti ja T&otilde;nis vaatavad, kuidas plaat s&ouml;&ouml;bub


&Auml;ra ujunud radadega tulemus 1


&Auml;ra ujunud radadega tulemus 2
Tulles tagasi Coilguni plaadi juurde, siis 1.5 sekundi tagant PLUNGER pin'ist 5V andmist kontrollisin testriga. Edasisteks toiminguteks mainin, et juhtmed k&auml;ivad sees niimoodi, et punane 5V juhe j&auml;&auml;b nurga poole. &Uuml;leminek SPI juhtmest AVR ISP-ini toimub nii, et violetne traat on pinnis 1, musta noolekese juures AVR ISP pistikul. AVR ISP-iga programmeerides Arduino IDE-st on t&otilde;en&auml;oliselt vaja &uuml;lalmainitud libUSB-d.


Tester n&auml;itas 1.5 sekundit 0-i l&auml;hedast tulemust


Tester n&auml;itas 1.5 sekundit 5V


Coilguni SPI - AVR ISP &uuml;leminek, violetne juhe = pin 1


Plaadi k&uuml;lge kinnituvad juhtmed punane traat nurga pool
[redigeeri] 8. oktoober
Harti: T&auml;&auml;mp&auml; oll &uuml;its v&auml;ga h&auml;&auml; p&auml;iv!
s&ouml;&ouml;vitasin uue plaadi ja too tuli ilus nagu kullat&uuml;kk. UV-d oli hoopis v&auml;hem vaja, nagu pildilt paistab, oli eile v&auml;ga p&auml;ikseline p&auml;ev ja p&auml;ike andis ekstra koguse UV-d mida ma algaja s&ouml;&ouml;vitajana ei osanud arvesse v&otilde;tta. V&auml;ide, et UV-ga kiiritamisel peab tahm olema vastu plaati pole t&otilde;si. Mina joonistasin markeriga kile peale kastikese (mitte sellele pooolele kilet kus tahm oli) ja see kastikene tuli v&auml;ga h&auml;sti v&auml;lja nagu ka k&otilde;ik muud kujundid sellel plaadil. (ma pilti ei pane, muidu teised muutuvad kadedaks:)
T&otilde;nis seadistas oma arvuti l&ouml;&ouml;ja plaati juhtima (mitu tundi l&auml;ks)
otsisin v&auml;lja oma mullu robotexil tehtud koodikese ja panime l&ouml;&ouml;ja plaadile(ELMA) v&auml;ikese jupi tarkvara peale ja see paistis t&ouml;&ouml;tavat, laadis kondeka kenasti t&auml;is.
siis ma vaatasin, et t&auml;na paistab k&otilde;ik v&auml;ga h&auml;sti v&auml;lja tulevat ja j&auml;tkasin.
panin l&ouml;&ouml;ja plaadi robotisse, &uuml;hendasin k&otilde;ik juhtmed ja muu vajaliku ning k&otilde;ik l&auml;ks nii nagu pidi. Robot l&otilde;i palli pea sama h&auml;sti nagu Kostja penalteid.
veel avastasin, et mootoriplaat v&otilde;i optokatkesti tarbib hirmsasti voolu ja n&uuml;&uuml;d on juba kolmas 5V regulaator &auml;ra k&uuml;psenud. Peab natuke seda asja uurima.
edasi pidin minema koju vanni ja seina vahele uut silikooni panema

T&otilde;nis: P&auml;ev hakkas suhteliselt aeglaselt, l&auml;ksin laborisse, mitu tundi jamasin selle coiliplaadi peale koodi kirja saamisega. Esmalt proovisin heade kaas-robootikute h&uuml;val n&otilde;ul et mine uind&otilde;usi ja t&otilde;mba omale avr studio5, sellega saab h&auml;sti programmeerida seda Atmega88't mis sul seal plaadil on, p&auml;ris kaua l&auml;ks selle laadimise ja installeerimisega, kui siis l&otilde;puks tuli raimond ja &uuml;tles "rumal mees mis sa teed see on k&otilde;ige hullem programm mida nad soovitada said, kasuta parem arduinoIDE't, sest seal on juba 3/4 t&ouml;&ouml;d sinu eest &auml;ra tehtud nii et sina pead ainult koodi kirjutama." Siis ma taask&auml;ivitasin oma r&uuml;peraali ja saabastasin ta ubuntusse ning vahtisin seal seda koodi edasi. Mitmeid huvitavaid asju &uuml;tles mulle see arduinoIDE. Kood katsetamis valmis avastasin, et andtud plaati pole nimekirjas millele kompileerida, otsisin kuuglist ning leidsin, et arduinoIDE kaustas
/arduinoIDE/libraries/Firmata/ 
tuli faili nimega boards.txt lisada uue plaadi kirjeldus, mis oli ka lahkesti seal lehel olemas. Alguses punnis vastu, et on
"undefined reference to loop()" 
ja
"undefined reference to setup()"
lisasin vastavad funktsioonid siin lehel soovitatule. Kuni l&otilde;puks ei andnud ta enam veateateid koodi kohta vaid USB pordi kasutamis&otilde;iguse puudumise kohta.
avrdude: usb_open(): cannot read serial number "error sending control message: Operation not permitted"
avrdude: usb_open(): cannot read product name "error sending control message: Operation not permitted"
avrdude: usbdev_open(): error setting configuration 1: could not set config 1: Operation not permitted
avrdude: usbdev_open(): did not find any USB device "usb"
Panin siis arduinoIDE k&auml;ima juure&otilde;igustes ning siis oli ka programm v&otilde;imeline plaadi kivile kirjutama koodi. Kuna aga see kood ei teinud veel seda mida meil vaja oli, siis Harti otsis oma arvutist v&auml;lja eelmise aasta koodi jupi mis oli suhteliselt k&otilde;vakodeeritud, kuid t&ouml;&ouml;tas, laadisime plaadile ning proovisime, alguses olid m&otilde;ned elektroonika vead, kuid need lahendasime ruttu.
[redigeeri] 9. oktoober
Raimond: Kirjutasin n&otilde;utud aruande sellen&auml;dalaste tegemiste kohta valmis ja aitasin laboris Hartil ja T&otilde;nisel Coilguni Plaadi integratsiooni meie roboti s&uuml;steemi realiseerida (l&ouml;&ouml;gi kohta info saamine Arduinolt ja Laptopist).
Kuna robotis olnud 5V pingeregulaator oli j&auml;lle l&auml;bi l&auml;inud, siis panin Mootorite Plaadi programmeerimise j&auml;rgmise n&auml;dala &uuml;lesandeks. Teine eesm&auml;rk on r&uuml;peraalis k&otilde;rgema taseme loogika programmeerimine pildit&ouml;&ouml;tluselt tuleneva info p&otilde;hjal. Ehk siis n&uuml;&uuml;d j&otilde;uame sinna kohta, kus eelmine aasta asjad probleemseteks j&auml;id.

T&otilde;nis: Programmeerisin MonoDev'is WindowMain'i n&otilde;nda, et l&auml;pakal vajutades "C"-klahvi annab l&auml;pakas arduinole k&auml;su tulistada, k&auml;su mille arduino saadab edasi coiliplaadile.
void coilgunSetup() {
       pinMode(PLUNGER, OUTPUT);
}
void coilgunLoop() {  
}
void fireCoilgun(byte power) {
	power = constrain(power, 0, 100);
	digitalWrite(PLUNGER, HIGH);
	delayMicroseconds(map(power, 0, 100, 0, 500000)); //proovisime nii, et kommenteerisime 
	digitalWrite(PLUNGER, LOW); // need kaks rida v&auml;lja
}
Kui need read olid v&auml;lja kommenteeritud siis tuli ilusti signaal arduinost coiliplaati. Kui need uuesti lisasime koodi, siis enam ei tulnud pinge l&auml;bi.
Raimond: Tegelikult tuli siis ka, m&otilde;&otilde;tsime ossiga... Lihtsalt tester ei suuda reageerida mikrosekundites kestva peaki peale. Ossis oli peak t&auml;itsa olemas.
[redigeeri] N&auml;dal 10. oktoober - 16. oktoober

[redigeeri] 10. oktoober
T&otilde;nis: Jaanus oli abivalmis ning soovitas proovida n&otilde;nda, et kasutada
delayMicroseconds(map(power, 0, 100, 0, 500000));
asemel
delayMicroseconds(5);
et anda lihtsalt kindel vahemik n&otilde;nda et alati tulistab sama tugevalt. Tegin soovitatud asenduse, kompileerisin, kirjutasin programmi kivile ning k&auml;itasin programmi. Panin roboti t&ouml;&ouml;le, k&otilde;ik ilus, kondekas laadis t&auml;is, teen Robini GUI aktiivseks ja vajutan C ning.... midagi ei juhtu. -.-' pettumus. HURRAA!! Koos Raimondiga vaatasime koodi &uuml;le ning saime t&ouml;&ouml;le, tulistab C vajutades ja laeb peale igat lasku.
Raimond: Vaatasime koos T&otilde;nisega koodi &uuml;le ja selgus, et puudu olid pinnidelt digitalRead ja analogRead. Seej&auml;rel testisime ja ikka ei t&ouml;&ouml;tanud korralikult. M&otilde;tlesime veel ja l&otilde;puks avastasime, et enne MEASURE pin'i lugemist tuleb lugeda ka sisendit DONE pin'ist. Kui selle olime ka &auml;ra teinud, siis saime Coilguni korralikult t&ouml;&ouml;le (arvutist k&auml;sku andes liigub k&auml;sk l&auml;bi Ardu Coili Plaadile ja pallil&ouml;&ouml;ja tulistab; kui parasjagu ei l&ouml;&ouml;da, siis hoitakse kondeka voolu ~200V peal).
Edasi T&otilde;nis tegeleb Mootorite Plaadi parandamisega ja ma hakkan r&uuml;peraalis sissetulevate andmete j&auml;rgi k&auml;itumisloogikat programmeerima. Harti paigaldab &auml;sja valminud LED-ide ja vooluplaati roboti kaane alla.
[redigeeri] 11. oktoober
T&otilde;nis: K&auml;isin laboris, tutvusin mootoriteplaadi koodiga l&auml;hemalt, harjutasin natukene jootmist. Ning, millegip&auml;rast keeldub minu arvuti meie SVN'i committimast, v&auml;ites et mu kasutajanimi ja parool on valed.


Mootorite Plaadist tulev 5V juhe, mis peabki lahtiselt olema
Raimond: Uurisin Mootorite Plaadi programmeerimise v&otilde;imalusi. USB-UART &uuml;leminekul oli Mootorite Plaadist tulev 5V juhe lahti, &uuml;lemineku pin nr. 4 tundus ahvatlev (oli tinane), seega jootsin ta vahepeal selle k&uuml;lge. Ka siis ei t&ouml;&ouml;tanud. Uurisin veidi &uuml;lemineku manuaali, kuid ei saanud v&auml;ga palju targemaks. Ilmselt Harti v&otilde;iks asja &uuml;le vaadata.


Windows n&auml;itab &uuml;hendatud seadme kohta &uuml;lalolevat
&Uuml;ritasin programmeerida nii nagu tegime seda eelnevalt, et programmaatori (P m&auml;rgisega) juhtme k&uuml;lge panin punase ja musta traadi vahele nupu, mis andis plaadile RESET k&auml;su... Seej&auml;rel t&otilde;mmati k&auml;ima Arduino bootloader, mis teooria j&auml;rgi peaks m&otilde;nda aega ootama sissetulevat koodi. Hetkel, mil Mootorite Plaadi LED &auml;ra kustus, hakkas ka kood arvutist tulema, kuid millegip&auml;rast LED vilkuma (andmed sisse jooksma) ei hakanud ja Arduino IDE n&auml;itas veateadet.
Seej&auml;rel &uuml;ritasin ka programmaatoriga, kuid edutult, sest t&otilde;en&auml;oliset bootloader on seadistatud atmegale restarti tegema, kui andmed sisse tulevad ja programmaator ei saa sellest aru ning n&auml;itab, et board on l&uuml;hises (vilgub punaselt, manuaal).

Pusisin veel ja tuli meelde, et kasutasime kunagi sellist asja nagu Sanguino. N&uuml;&uuml;d avastasin, et toda tegelikult polegi vaja... Vaja on hoopis &otilde;igeid FTD draivereid. T&otilde;mbasin need &auml;ra, v&otilde;tsin Win7 Device Manageri, mis n&auml;itas, et MM232R moodul on probleemne, valisin talle update driver ja v&otilde;tsin, et otsin ise draiverid (Have Disk). Seej&auml;rel pakkusin talle allat&otilde;mmatud draiverit (ftdbus). Tolle ta paigaldas &auml;ra ja siis k&uuml;sis, kas ma tahan, et Windows Update ka draivereid otsiks. P&auml;rast seda leidis Windows Update ka veel mingi draiveri, mille installisin &auml;ra. Ja seej&auml;rel proovisin uuesti l&auml;bi UART-i programmeerida ja seekord asi &otilde;nnestus.
&Uuml;hes&otilde;naga, selleks, et Mootorite Plaadile koodi peale lasta, tuleb:
Mootorite Plaat panna &uuml;ldisesse boards.txt faili (Mootorite Plaadi kaustas on boards.txt, kus on MP andmed; &uuml;ldine boards.txt asub ArduinoIDE/hardware kaustas)
USB-UART &uuml;leminekuga programmeerimisel kasutada tavalist Mootorite Plaadi boards.txt sissekannet (mitte AVR ISP mk2 oma)
Kontrollida, kas arvuti tunneb USB UART &uuml;lemineku mooduli (MM232R) &auml;ra.
Kui ei tunne, siis installeerida draiverid.
Mootorite Plaadile tuleb &uuml;hendada 2 juhet: 1) UART, &uuml;leminekult tulev juhe; 2) Programmaatori juhe (m&auml;rgisega P)
Programmaatori juhtme otsas peab olema Punane Nupp, mis &uuml;hendab vajutamisel punase ja musta traadi (punane on RESET ja must on maandus).
Arduinost koodi saates tuleb koheselt p&auml;rast koodi kompilleerumist (alla ilmub binary sketch size) vajutada Punast Nuppu, mille j&auml;rel Mootorite Plaadi LED kustub &auml;ra.
Kui koodi &uuml;lesminemine hakkas peale, siis Mootorite Plaadi punane LED hakkab vilkuma &otilde;rnalt (andmed jooksevad plaati).
P&auml;rast programmi &uuml;leslaadimist teeb Mootorite Plaat automaatselt resa ja hakkab koodi jooksutama.


Nii Punane Nupp kui ka USB-UART moodul peavad olema &uuml;hendatud


Mootorite Plaadi k&uuml;lge k&auml;ivad nad selliselt
NB!
Kui programmeerimine eba&otilde;nnestus (ei saanud nupule &otilde;igel ajal pihta), siis proovida uuesti.
Mootoritele PWM-i m&auml;&auml;rates j&auml;lgida, et ei satuks olukorda, kus PWM-i vahetatakse j&auml;rsult -255 pealt 255 peale (v&otilde;ttes arvesse suunda) v&otilde;i 0-st 255 peale... Eelmine aasta mainiti, et selline k&auml;itumine v&otilde;ib draivereid rikkuda.
Mootoritel on mingi n-&ouml; miinimum PWM, millest alates ratast reaalselt edasi ka veetakse. Alla selle olevate PWM-ide korral mootorid vilisevad. T&otilde;en&auml;oliselt on see suurus kuskil 20-40 vahel, maas olles v&otilde;ib suurem olla.
Mootorite Plaati programmeerides ja selle juures ka mootoreid testides tuleb robot asetada maast k&otilde;rgemale (rattad lahti). Selleks sobivad ideaalselt digilabori v&auml;iksed valged sahtlid (riiulis on neid p&auml;ris mitu t&uuml;hjalt seisvat). &Uuml;he &uuml;ritan j&auml;tta ka arvutiklassi printeri juurde. Valge sahtlike tuleks asetada t&auml;pselt roboti p&otilde;hja keskele alla. Selle &auml;ra unustamine v&otilde;ib p&otilde;hjustada seda, et robot s&otilde;idab n&auml;iteks laua pealt maha...
Mootorite testimine ja kasutamine kulutab LiPo-t. T&otilde;en&auml;oliselt Coilguni testimine ka... Seega millalgi oleks hea kontrollida testriga LiPo pinget (v&otilde;iks olla kuskil 11.5-12V juures) ja madalama korral panna LiPo laadima ning v&otilde;tta kapist teine (kontrollida ka tolle pinget).
Harti sain ledide ja toiteplaadi valmis
[redigeeri] 12. oktoober
T&otilde;nis: Debugisin natukene, miks funkab ainult tagumine mootor, vahetasin vasaku ratta ja tagumise ratta voolu otsad mootorite plaadil &auml;ra ning t&ouml;&ouml;le hakkas ainult vasak mootor. Uurin kas tegu on koodi probleemiga v&otilde;i mootorite voolupistikute viga.
Harti: Panin kaane k&uuml;lge karbi ja karbi sisse plaadi ja plaadi k&uuml;lge 6 juhet. 12 volti k&auml;ib n&uuml;&uuml;d l&auml;bi karbi.

[redigeeri] 13. oktoober
T&otilde;nis: V&otilde;tsin mootorite plaadi robotist v&auml;lja ja hakkasin uurima, miks rattad ringi ei k&auml;i. Kalle &otilde;petas mulle Ossi kasutamist ja selgus, et onu oskar on meie hea s&otilde;ber. Onu oskar &uuml;tles mulle, et ainult tagumise ratta signaal t&ouml;&ouml;tab kui pwm, &uuml;ks esimestest ratastest t&ouml;&ouml;tab kui pidev signaal ning teine eesmise ratta pinheader ei saa maandust taha. Palusin Mihklil vaadata mikroskoobi all &uuml;le kas draiverite ja kontrolleri jalad on ilusti joodetud. Mihkel arvas, et need jalad v&otilde;iks k&otilde;ik korralikult &uuml;le joota. Peale seda kui Mihkel oli &uuml;le vaadanud, &uuml;hendasin juhtmed plaadile tagasi nii nagu ennem oli, ja mootorite plaat ei saanud enam korralikult voolu ning keeldus t&ouml;&ouml;tamast korralikult. Ilmselt tuleb siis mootorite plaat piiritusega &auml;ra pesta ning korralikult k&otilde;ik jalad &uuml;le joota... Homme tulen laborisse ja teen omale selgeks mis on PID ja kuidas seda rakendada mootori pwm'le


Koodi uurimine ja asjade l&auml;bim&otilde;tlemine Martiga Skaibis
Raimond: M&otilde;tlesime Martiga, kuidas &uuml;ldisemat loogikat robotis teha. J&otilde;udsime selgusele, et RetroEncabulator klassist saab enamik asju s&auml;&auml;sta. VisionData tuleb natuke &uuml;mber teha, et seal oleksid j&auml;rgnevad v&auml;ljad
* bool FrontBallPathObstructed
* bool TrackingBall
* short TrackedBallDistance (vist on kasulik?)
* short TrackedBallDirection (peab kokku leppima, kuidas kraadid &uuml;tleme)
* bool OpponentGoalInFront
* bool OpponentGoalVisible
* Short OpponentGoalDistance (coilguni l&ouml;&ouml;gi tugevuse arvutamiseks?)
* short OpponentGoalDirection (kokkuleppe k&uuml;simus)
Seej&auml;rel m&otilde;tlesime, et liikumisk&auml;su pakett, mida r&uuml;peraal edastab v&otilde;iks sisaldada endast nurgakraadi, kuhu poole tuleb s&otilde;ita, ning kiiruseprotsenti (kui paljuga max kiirusest me sinna s&otilde;idame). Seej&auml;rel liiguks pakett edasi Arduinosse, kus pannakse k&auml;ima 500ms taimer ja saadetakse pakett edasi Mootorite Plaati. Kui 500ms jooksul uut k&auml;sku ei tule, siis saadab Arduino ise Stop-k&auml;su, vastasel juhul saadetakse aja sees saabunud uus k&auml;sk ja taasseadistatakse taimer.


Tund aega tagasi mitte t&ouml;&ouml;tanud Mootorite Plaadi LED p&otilde;leb j&auml;lle


Mootorite Plaatide uurimine ostsilloskoobiga: Meie plaadi Right mootori draiver t&ouml;&ouml;tab
Ilmselt peab sama tegema ka Turn ja MoveAndTurn k&auml;skudega...
Seej&auml;rel lugesime Robotexi reegleid ja n&auml;gime, et robotid ei tohiks kasutada samu v&auml;rvivahemikke enda kujunduses nagu on v&auml;ljakul pallid ja v&auml;ravad. Marti arvas, et &auml;kki ainult punase-kanali pealt oranžide pallide tuvastamine ei anna sobivat tulemust, kui vastase robot on n&auml;iteks &uuml;leni punane vms. Seda peab veidi testima...
Seej&auml;rel leidsin sellise faili, kus veidi r&auml;&auml;gitakse, kuidas kaamerapildist palli t&auml;pset kaugust teada saada. Marti soovitas ka digiwiki artiklit selle kohta. Pean veel uurima... Eelmine aasta me jaotasime pildi aladeks ja andsime igasse alasse kuulumise korral fikseeritud s&otilde;itmisk&auml;su. See aasta aga tahaksime arvutada v&auml;lja nurga roboti otsesuuna ja palli asukoha vahel ning ka kauguse pallist. Harti &uuml;tles, et see on lihtne... :P
Peale seda selgus, et Mootorite Plaadiga on mingi kamm. T&otilde;nis ja Harti arvavad, et Atmega peal on midagi katki l&auml;inud ja jalgadest ei saadeta signaale enam &otilde;igesti. K&uuml;sisin siis Erik Ilbiselt, kas me v&otilde;ime laenata nende eelmise aasta roboti pealt Mootorite Plaati... V&otilde;isime. Panin m&otilde;lemale plaadile AVR ISP-iga testkoodi (saata k&otilde;ikidesse jalgadesse pwm 100) peale, kuid m&otilde;lemal plaadil t&ouml;&ouml;tasid mingil m&auml;&auml;ral ainult Left ja Right Motor. Meie vanal plaadil kadusid need ka &uuml;hel hetkel &auml;ra... Team Pacmani vanal plaadil oli samuti Back ja Front Motoritega kahtlane... T&otilde;nis ja Harti v&otilde;iksid need asjad &uuml;le vaadata.
Panin hetkel m&otilde;lemad plaadid kappi ja markeerisin spetsiifilise kilekoti nende jaoks. Hetkel ei tea, kas USB-UART &uuml;leminek neil t&ouml;&ouml;tab, progresin AVR ISP-iga... Bootloaderi kirjutamisega Pacmani plaadile oli veits probleeme, sest Sanguino Atmega328P bootloader oli tavaformaadis liiga suur. Ma ei hakanud .c faili otsima ja optimaalsemalt kompilleerima, vaid t&otilde;mbasin meie Mootorite Plaadi pealt .hex faili alla ja kirjutasin teisele plaadile.
Mootorite Plaadi (Atmega 328PV) pinnid leiab, kui t&otilde;mmata alla Sanguino ja v&otilde;tta sealt Sanguino/cores/arduino/pins_arduino.c. T&otilde;nis muretses, et &auml;kki Mootorite Plaadi koodis on valed pinnid defineeritud... Tolle j&auml;rgi ei tundu olevat, aga v&otilde;ib muidugi &uuml;le vaadata.
Lisainfoks veel, Coili plaadil olev Atmega88 pinmapi saab siiski teada n&auml;iteks sealt. Meie kasutataval Atmegal on k&uuml;ll 4 jalga juures, kuid...
[13.10.2011 22:19:54] Marti Kaljuve: tundub, et sellel 32 piniga tr&uuml;kkplaadile joodetaval variandil on lisatud &uuml;ks VCC ja GND rohkem + AD converterid 6 ja 7, 
mida sellel suurel 28 pinisel pole.. &uuml;ldiselt k&otilde;ik muu j&auml;&auml;b ikkagi samaks
[13.10.2011 22:22:37] Marti Kaljuve: "Two additional multiplexed single ended input channels" on nendel 32 piniga variantidel
Back ja Front mootorite draiveritega tundub midagi korrast &auml;ra olevat, sest PWM-i kas ei tule v&otilde;i kukub ta kohe p&auml;rast sissel&uuml;litamist &auml;ra. Samuti h&auml;irib mind veidi PWM signaalis kahtlased peakid. Samas T&otilde;nis &uuml;tles, et nendest pole v&auml;ga hullu...


Signaal ei ole p&auml;ris selline nagu minu meelest v&otilde;iks olla...


Mingil momendil kaob PWM lihtsalt &auml;ra...
[redigeeri] 14. oktoober
Raimond: T&otilde;nis oli Mootorite Plaadi ATmega alt jootevedelikku v&auml;lja pesnud ja plaati uuesti uurinud. Selgus, et ATmega jalgadelt tuleb v&auml;ga ilus signaal draiveriteni, kuid kahest draiverist tuleb teiseltpoolt mingi jaburus. Seega k&uuml;sisin Helinalt kaks uut draiverit (mitte uut ATmega, nagu eile sai m&otilde;eldud)... Karl Tarbe andis laboris kaks draiverit meile &auml;ra.


Inimesed uurivad, kuidas me &uuml;ritame Coili Plaati l&ouml;&ouml;ma panna
Seej&auml;rel testisime Coili plaati uuesti. Selgus, et roboti kaanest tulev 12V juhe ei anna kohati v&auml;ga head kontakti. See v&auml;ljendus selles, et n&auml;iteks kondensaator ei hakanud kohe laadima, kui kaane pealt nuppu vajutasime. Kui liigutasime ka harukarpi tulevat voolujuhet veidi (eriti pistiku juurest), siis tuli vool l&auml;bi.
T&otilde;stsime Coilil voolu peal hoidmise maksimaalset ajavahemikku veidi suuremaks (5000 us -> 10k us). Hetkel v&otilde;ttis 100%-ga l&ouml;&ouml;k umbes 80-90V kondensaatorist. V&auml;ga piisav on tegelikult l&uuml;&uuml;a ka 50%-ga.
Selgus ka, et meie pallil&ouml;&ouml;ja v&otilde;ib j&auml;&auml;da m&otilde;ndade l&ouml;&ouml;kide puhul v&auml;lja kinni ja ei oska enam pessa tagasi p&ouml;&ouml;rduda. K&uuml;ljepealne liugur tuleb liiga ette ja j&auml;&auml;b pleksi taha kinni. Probleem v&otilde;is tulla sellest, et millegip&auml;rast oli l&ouml;&ouml;jat kinni hoidev n&ouml;&ouml;r muutunud liiga pikaks. V&otilde;imalik, et probleemi lahendab n&ouml;&ouml;ri l&uuml;hemaks sidumine.


T&otilde;nis uurib roboti sisepingeid
&Uuml;hel hetkel tahtis Ahti Laurisson , et me v&otilde;iksime testida ka tema m&auml;hist. Proovisime ka tolle l&ouml;&ouml;ki ja minu meelest oli t&auml;itsa normaalne. Kui terasosa on m&auml;hise suhtes &otilde;iges kohas (mitte liiga kaugel ja mitte liiga keskel), siis on l&ouml;&ouml;k hea. P&auml;rast uuesti meie enda m&auml;hist tagasi &uuml;hendades &otilde;nnestus Coili Plaadi k&uuml;ljele v&auml;ike auk p&otilde;letada. See on p&otilde;hjus, miks mulle ei meeldi lahtised juhtmed roboti sees. Idee poolest tuleks praegu ajutiselt eemaldatud Mootorite Plaadi k&uuml;ljest tulnud juhtmed ka ajutiselt &auml;ra isoleerida. Mingi suvaline juhe kukub kuskile skeemi peale v&otilde;i l&auml;heb korraks vastu ja j&auml;rgmisel hetkel midagi suitseb. Nagu eelmisel aastal paar korda juhtus..... &Otilde;nneks k&uuml;ll ainult juhtme isoleeriga.
Igal juhul, edasine plaan on T&otilde;nisel ja Hartil uurida uuesti Mootorite Plaadi elektroonikat veidi ja seej&auml;rel vajaduse korral vahetada v&auml;lja d&uuml;sfunktsionaalsed draiverid (vahepeal ka ilma draiveriteta plaati debugida). Kahju, et see viga ei ilmnenud 2-3 p&auml;eva varem, oleks saanud ehk Mihkel Pajusalu elektroonikaplaatide debugimise praktikumis selle kohta k&uuml;sida.


M&otilde;ned ajad tagasi valminud LED-ide ja voolujagamise plaat roboti kaane k&uuml;ljes


Uued juhtmed nii meie kui ka team Pacmani Mootorite Plaadile reseti andmiseks


Coili Plaadi kahjustus
[redigeeri] 16. oktoober


Pallid v&auml;ljakul
Raimond: Sain Tallinnas Martiga kokku ja r&auml;&auml;kisime, kuidas robotit kontrolliv loogika peaks t&ouml;&ouml;tama ja milliseid andmeid saadetakse erinevate plaatide vahel. Suhtluspakette kirjeldav fail asub SVN-is Documentation kaustas: arduino_pc_communication.txt.
Laboris selgus, et meie Mootorite Plaadi kellasignaal on vigane. Team Pacmani plaadil oli ilus signaal, kuid meil paistis olevat peale kella ATmega CKOUT jalal veel mingi teine signaal peal. Ostsilloskoobil n&auml;itas normaalset kella taustal ja mingisugust pikemat lainetust selle ees vaheldumisi.
Tegin ka pildit&ouml;&ouml;tluse jaoks pildi, kus on uuesti asetatud pallid kindlatele kaugustele kaamerast. Eelmisel pildil me enam ei m&auml;letanud kaugusi, n&uuml;&uuml;d kirjutasin kaugused pildifaili peale.
[redigeeri] N&auml;dal 17. oktoober - 23. oktoober

[redigeeri]17. oktoober


GUI update
Raimond: Tegin laptopi suhtlusk&auml;sud &uuml;mber uuele Martiga l&auml;bi r&auml;&auml;gitud k&auml;sustikule. Ehk siis n&auml;iteks Move saab ette ainult kraadi ja kiiruse, Turn k&auml;su asemel on TurnLeft ja TurnRight. Edasi tuleb veel Arduinos see &uuml;mber teha...
Samuti tegin GUI-sse FPS-i n&auml;itamise, kasutatava kontrolleri .dll-i n&auml;itamise ja portide listi refreshimise, kui porte tuleb juurde v&otilde;i l&auml;heb &auml;ra.
Saime Pacmani Mootorite Plaadi t&ouml;&ouml;le. Selgus, et Sanguino kaust oli puudu. Meie Mootorite Plaadil on kvartsiga mingi probleem, kellasignaal oli vale sagedusega (n&auml;gi v&auml;lja nagu oleks ATmegast tulnud madal sagedus, samas fusebitid olid m&auml;&auml;ratud, et kasutada v&auml;list signaali).
Mark r&auml;&auml;kis meile veidi PID-ist. Too tuleks teha X, Y ja Theta peale, mitte iga mootori PWM-ile nagu meil vist praegu oli tehtud. V&auml;ga asjalik info oli:
PID-ist tulev PWM tuleb saata otse mootoritele
Mootorite draiverite Mode peaks olema Fast Decay peal
P komponent viib v&auml;ljundi peaaegu soovituni, kuid mitte t&auml;pselt selleni v&auml;lja
I komponent viib t&auml;pselt soovitud v&auml;ljundini
D komponent pidurdab kasvu, et me ei l&auml;heks soovitud v&auml;ljundist &uuml;le
Ka Arduinol on olemas PID-i teek.
Otsida &otilde;petusi, mille j&auml;rgi PID-i iga komponendi kordajaid m&auml;&auml;rata...
K&uuml;si Hartilt, ta tegi kevadel AJMis sellekohase t&ouml;&ouml;.
[redigeeri]18. oktoober
Tassisime vineeri ribasid autost teisele korrusele. Sorteerisime vineeri ribasid. Lihvisime vineeri ribade nurkasid. Niiske lapiga puhastasime vineeri ribad, et v&auml;rv k&uuml;lge j&auml;&auml;ks. V&auml;rvisime vineeri ribad valgeks. Roboti osas progressi polnud.
[redigeeri]19. oktoober
Konstruktiivne arutelu roboti liikumisloogika teemal. Kui kood poleks nii haruline, oleks ta juba t&ouml;&ouml;tanud.
Harti : t&ouml;&ouml;tasin v&auml;lja metoodika rataste &uuml;mberm&otilde;&otilde;du m&otilde;&otilde;tmiseks ja kauguse m&auml;&auml;ramiseks roboti keskpunktist.
Raimond: K&auml;rpisin koodi niipalju kui hetkel v&otilde;imalik tundus. Siiski peaksime hoidma erinevaid asju &uuml;ksteisest lahus koodis... N&auml;iteks k&auml;su vastuv&otilde;tmine, liikumisk&auml;su parse'imine (Move puhul x ja y arvutamine), PID-i arvutamine jne.
Aga &uuml;ldiselt, kui oleks natuke rohkem maganud, siis ei oleks teinud s&auml;&auml;raseid vigu nagu saatnud sin() ja cos() funktsioonidele ette nurki kraadides, kinematicsile desiredX, desiredY ja desiredTheta asemel kolm korda desiredX jm, mille peale l&auml;ks minu meelest nii m&otilde;nigi tund. V&otilde;ib-olla oleks muudest asjadest ka paremini aru saanud.. eriti, kuna hiljuti sai sirvutud sellist dokumenti veidi..
[redigeeri]20. oktoober
Harti: K&auml;isin hommikul kell 7 T&Uuml;TIt h&auml;iresse ajamas. Helina &uuml;tles Raimondile, et ta meiega t&auml;na hommikul r&auml;&auml;kida tahab, aga meie ei saanud aru millal tal see tahtmine &uuml;le l&auml;ks ja l&auml;ksime ilusti kohale. Kedagi polnud :(. Siis tulin laborisse ja jootsin meie mootoriteplaadile peale uue protsessori ja resonaatori.
Hiljem panin robotisse uue toitekaabli koos pistikutega.
Raimond: Testisin uue ATmega (644P) ja kvartsiga Mootorite Plaati. Esimesed kolm ratast p&ouml;&ouml;rlesid h&auml;sti, TOP_PWM v&auml;ljundisse asetades (ja koodi &uuml;mber muutes) too mootor ei t&ouml;&ouml;tanud. Seega esialgu tundub, et p&otilde;hiline viga oli ATmegas ja/v&otilde;i kvartsis ning &uuml;lemised kolm draiverit t&ouml;&ouml;tavad ja viimane mitte. Seda v&otilde;iks veel &uuml;le kontrollida p&otilde;hjalikumalt...
Mootorite Plaadil on peal sama bootloader, mis sai eelnevalt peale lastud. 324P ja 644P-l on sama Sanguino bootloader. Uuendasin boards.txt faili kahe sissekandega (UART ja AVR ISP) 644P jaoks.
Muudatus: T&otilde;epoolest, alumine (TOP) draiver ei t&ouml;&ouml;ta. ENABLE pin'i peale tuleb ATmegalt ilus PWM, kuid OUTA on t&auml;iesti t&uuml;hi. Kui samas k&otilde;rvaloleval draiveril tuleb samasugune sisend ENABLE-ile ning OUTA-st ka v&auml;ljund. Draiverite A3950SLP-T datasheet'i ja Mootorite Plaadi skeemi j&auml;rgi on ENABLE vasakult alt kolmas jalg ning OUTA vasakult alt teine jalg, mis l&auml;heb plaati l&auml;bivasse auku kohe sealsamas. Seda siis hoides plaati nii, et draiveri t&auml;pp j&auml;&auml;b vasakule &uuml;les.
[redigeeri]21. oktoober
Raimond: Testin forward kinematicsit... Ilma PID-ita on otse s&otilde;itmise tulemus j&auml;rgnev:
x :0.52; y :-34.42; theta :-2.69; 
x :0.86; y :-33.94; theta :-4.46; 
x :0.50; y :-31.79; theta :-2.62; 
x :1.08; y :-33.35; theta :-5.62; 
x :0.53; y :-33.12; theta :-2.77;
Tagumine magnetandur ei anna lugemit. Kahtlustan veidi juhet, sest &uuml;hel hetkel programmaator &uuml;tles punase vilkumisega, et plaadil on l&uuml;his. V&otilde;tsin tagumise magnetanduri juhtme k&uuml;ljest &auml;ra ja probleem lahenes. Pannes tagumise ratta j&auml;rjest p&ouml;&ouml;rlema, tulid sealselt magnetandurilt lugemid v&auml;ga harva ja olid veidrad.
SinLookupTable funktsioon t&ouml;&ouml;tab.
desiredY = (SinLookupTable::getCos(angleInRadians * 1000) / 1000) * speedValue; 
double desiredYreal = cos(angleInRadians) * speedValue;
Serial.println();
Serial.print(desiredYreal);
Serial.print(" = ");
Serial.print(desiredY);
Serial.println();
Andis tulemuseks -63.00 = -63.00. Marti &uuml;tles, et tavaline sin() v&otilde;tab ligikaudu 120 takti, kuid lookupTable'iga saab t&otilde;en&auml;oliselt ~20 taktiga asja tehtud.
Muudatus: Sain komponendid omavahel suhtlema. Arduinos olid m&otilde;ned bugid, mis takistasid Wire'isse info saatmist. Olles kontrollinud &uuml;le I2C juhtme &otilde;ige paigutuse (oli &otilde;ige) ja pannud Mootorite Plaadi LED-i vilkuma k&auml;su vastuv&otilde;tmise korral, sain l&otilde;puks robotiga ringi s&otilde;ita Laptopist k&auml;ske saates.
Tegin TurnLeft ja TurnRight k&auml;sud ka sooritatavateks. Laptopist Q ja E turnivad... Kordinaatteljestik on meil endiselt sassis, sest hetkel vasakule k&uuml;lgsuunas liikumisel liigub robot paremale jne. Seda asja peab veel uurima.
PID ja forward kinematicsi tegemine on hetkel raskendatud tagumise ratta magnetanduri puudulikkuse t&otilde;ttu.
[redigeeri]23. oktoober
Raimond: Enamiku p&auml;evast tegime Martiga seda, et &uuml;ritasime tal projekti t&ouml;&ouml;le saada. Toshiba r&uuml;peraal, kus ta seni oli arendanud, oli kerneli uuenduse t&otilde;ttu ajutiselt kasutusk&otilde;lbmatuks muutunud. Delli r&uuml;peraali Lubuntu virtuaalmasinas ei saanudki EmguCV probleemide t&otilde;ttu korralikult asja k&auml;ima. Package'ina paigaldamine oleks j&auml;&auml;nud poolikuks nagu mul enne juhtus (&uuml;levalt saab lugeda) ning EmguCV lehel oleva &otilde;petuse j&auml;rgi kompilleerimine (mida ma soovitan) oleks v&otilde;tnud aega paar tundi.


Pildit&ouml;&ouml;tluse j&auml;rgi saadetakse k&auml;ske
Seega tegime roboti Ordi r&uuml;peraalis korda olekumasina ja t&auml;itsime &auml;ra VisionData objekti, kuhu piltit&ouml;&ouml;tlus paneb andmeid, mida hiljem MainLogicProcessor kasutab olekutes otsuste tegemisteks.
Tundub, et k&otilde;ik t&ouml;&ouml;tab sealtpoolt normaalselt, robotile niisama laua peal palli n&auml;idates &otilde;nnestus tal pall &auml;ra lukustada ja saata vastavalt palli asukohale liikumisk&auml;ske. L&auml;ksin p&auml;rast veel v&auml;ljaku peale testima, kuid seal millegip&auml;rast pildit&ouml;&ouml;tlus palli ei lukustanud. Marti oli Tallinnas proovinud &uuml;he natuke heledama golfipalliga... Mainiksin siinkohal ka seda, et n&uuml;&uuml;d on aeg j&otilde;udnud nii kaugele, kus me sooviks ka &uuml;hte oranži golfipalli, sain aru, et igale meeskonnale on v&auml;hemalt &uuml;ks lubatud?


Kaamera parameetrite m&auml;&auml;ramine
T&otilde;mbasin sellise asja nagu v4l2ucp, mis v&otilde;imaldab Lubuntus veebikaamera seadistusi muuta. Muutsin v&auml;ljaku peal ka seadistusi, kuid endiselt pallituvastus p&auml;ris h&auml;sti ei t&ouml;&ouml;tanud.
P&auml;eval tegime ka p&auml;risv&auml;ljaku peal testvideo, mille j&auml;rgi Marti saab p&auml;rast Tallinnas pildit&ouml;&ouml;tlust teha. Kahjuks olid testv&auml;ljakutel veel jooned kinniteibitud, seega too video ei pruugi olla k&otilde;ige parem. Mitmed inimesed &uuml;tlesid, et plaanis on veel &uuml;ks kiht v&auml;rvi sinna lisada, seega ei saanud me teipi &auml;ra v&otilde;tta.
Harti ja T&otilde;nis tegid samal ajal forward kinematicsit ja PID-i. Minu meelest tuli see neil suht h&auml;sti v&auml;lja... L&otilde;puni t&ouml;&ouml;le k&uuml;ll ei saanud, kuid kui ma &otilde;htul asja &uuml;le vaatasin, siis v&otilde;tsin veel forwardKinematicsi y ja theta komponendi k&uuml;ljest -1 kordaja &auml;ra ning tundub, et asi v&otilde;iks nagu n&uuml;&uuml;d &otilde;igesti t&ouml;&ouml;tada. V&auml;hemalt &otilde;iges suunas. Kahjuks toda isiklikult ma v&auml;ga palju testida ei j&otilde;udnud, tundub, et PID-i komponentide kordajad on liiga v&auml;iksed... Igatahes robot liikus veidi h&auml;disemalt kui hommikul ning v&auml;ljaku vaiba peal ei suutnud &uuml;ldse s&otilde;ita. Plaan on homme kiirused ka paika saada ja asi &uuml;le vaadata.
Tagumise magnetanduri osas v&otilde;tsime kasutusele eelmisest aastast alles j&auml;&auml;nud varu-magnetanduri. Jootsime juhtme &uuml;mber, t&otilde;stsime pistiku ka &uuml;mber (enam pole CS_U, vaid CS_B nagu peaks) ning t&ouml;&ouml;tas.
Tegime &auml;ra ka grupipildi. =)

[redigeeri] N&auml;dal 24.-30. oktoober

[redigeeri] 24. oktoober
Raimond: Testisin kella 18 ajal laborisse j&otilde;udes PID-i (P kordaja oli 0.5 ja I oma 0.1). Tundus, et magnetanduritelt saadud tagasiside oli valedes &uuml;hikutes, sest l&otilde;puks m&otilde;&otilde;detud input j&otilde;udis k&uuml;ll setpoindini, kuid selleks ajaks oli output visatud &uuml;le 255.
Seej&auml;rel k&auml;isime koos Harti ja T&otilde;nisega l&auml;bi k&otilde;ik kinematicsites tehtavad valemid. Proovisime s&otilde;ita vaiba peal ja arvutasime v&auml;lja, et maksimaalne &uuml;he ratta kiirus seal otse s&otilde;itmisel tuli 34.5 cm/s. Kuna kiirus on niiv&otilde;rd madal, siis me ei hakkagi t&otilde;en&auml;oliselt k&auml;skudele mingeid kiirusi andma, vaid &uuml;ritame kogu aeg s&otilde;ita maksimaalse kiirusega. Kuidas see t&auml;psemalt k&auml;ib on veel m&otilde;tlemisel...
&Uuml;he viimase asjana avastasime forward kinematicsist j&auml;rgneva rea:
y = ((sqrt3 * left) - (sqrt3 * right)) / -3.0;
Kas see peaks olema &auml;kki mitte sqrt(3) = tan(60) seal, vaid hoopis cos(30)?
y = ((cos30 * left) - (cos30 * right)) / -3.0;
Left ja right selle juures on siis magnetanduri poolt m&otilde;&otilde;detud p&ouml;&ouml;ranud nurk &uuml;he millisekundi kohta (m&otilde;&otilde;tmistulemuste vahet jagame m&otilde;&otilde;tmistulemuste aegade vahega).


PidY P kordajaga 1.0
Harti tuli hiljem kodus hoopis sellele m&otilde;ttele, et meil ei olegi vaja PidX, PidY ja PidThetat, vaid meile piisab &uuml;hest/kahest PID kontrollerist: nurga hoidmiseks ja p&ouml;&ouml;ramiseks. Ta veel m&otilde;tleb seda v&auml;lja, kuidas too s&uuml;steem peaks t&ouml;&ouml;tama.
Vahepeal plahvatas Team Spiritil teises ruumis kondensaator.. samal ajal, kui meie meeskonna poolt kirjutatud kood Coili plaadil neil kondekat ~200V juures pidevalt hoidis. Olen praeguseks hetkeks hoidnud enda roboti peal toda koodi jooksmas ja kondekat 209V peal 32 minutit. Pinge ei ole 209V-st k&otilde;rgemaks l&auml;inud.
Meililistis toimus arutelu ja hakkasin m&otilde;tlema selle &uuml;le, et PID-i v&auml;ljundit liita soovitud v&auml;ljundile. Eelmine aasta isegi midagi sellist proovisime l&auml;bi, kuid v&auml;hemalt tol hetkel proovitud tulemus ei tundunud &otilde;ige ning teiste k&auml;est k&uuml;sides kinnitati ohtralt, et PID-i v&auml;ljund tuleb ikka otse saata v&auml;ljundisse, mitte liita. Igal juhul, v&otilde;imalik, et peakski tegema PID-i v&auml;ljundi liitmist mingile v&auml;lja antavale v&auml;&auml;rtusele. N&auml;iteks tahan s&otilde;ita y-suunas kiirusega 100% maksimaalsest kiirusest, siis koheselt antakse peale mingi 170 PWM ning vahemikus 170-255 vaatab PID, mida anda... Eks homme Hartiga arutame need asjad l&auml;bi.
Kuna meie tasklist tundub parandamist vajav, siis lisan uued ja v&auml;iksemad taskid juurde. Hetkel mulle tundus, et sellest kriisikavast ja &uuml;le&uuml;ldisest suhtlusest nagu piisaks, aga v&otilde;ib-olla siiski siis mitte...
[redigeeri] 25. oktoober
Raimond: &Uuml;lalmainitud koodirida pidi ikkagi sisaldama sqrt3, mitte cos30. Ma p&auml;rist&auml;pselt ei saanud aru, kust see tuleb, kuid Hartiga koos aimasime veidi. Tegime kinematicsid ja PID-i &uuml;mber, kuid enne testimist pidi Harti &auml;ra minema. Testisime T&otilde;nisega edasi ja esines probleeme. Kirjutasin need paberile &uuml;les ja jagasin v&auml;ikesteks osadeks, mis tuleb &auml;ra parandada.
Igatahes, n&uuml;&uuml;dne PID t&ouml;&ouml;tab Alpha ja Theta peal. Alpha t&auml;histab meil nurka, kuhu poole robot s&otilde;itma peab. Theta t&auml;hendab kiirust, millega robot &uuml;mber oma telje peaks p&ouml;&ouml;rama (mind juba teavitati, et see peaks olema omega). Igatahes, tekkis probleeme sellega, et rattad ei korrigeerinud enam vigu &auml;ra (nagu nad pidX ja pidY korral tegid) ning seisma j&auml;&auml;miseks tuleb mul pidAlpha v&auml;lja l&uuml;litada ajutiselt (muidu ta arvab, et on vaja s&otilde;ita n&auml;iteks 0-kraadi suunas, mis on otseliikumine).
Saime teada, et selle seismaj&auml;&auml;mise probleemi lahendamiseks me saame muuta kiiruse kordajat. Too tuleb veidi &uuml;mber teha siis, sest hetkel ma tegin ta makroks ning see sisalda roboti maksimaalset vaibal saavutatavat kiirust ~0.4 m/s. Tundub, et v&otilde;ib siis n&auml;iteks korrutatava kiiruse m&auml;&auml;rata 0-ks, kui tuleb &uuml;ks k&auml;skudest: TurnLeft, TurnRight, Stop. Samas ma ei tea, kuidas see erineb praegusest boolean v&auml;&auml;rtuse shouldAlphaMove j&auml;rgi (mitte/)tegutsemisest.
Helistasin Martile ja pildit&ouml;&ouml;tluse osas oleme endiselt selle probleemi taga, et SD kaarti pealt ei saa tehtud koodi k&auml;tte.
[redigeeri] 27. oktoober


Reaalne pilt


Vastase v&auml;rav tuvastati hunniku pallidena


Reaalne pilt


V&auml;ljaku jooned tuvastati pallidena


v4l paneelist maha v&otilde;tta automatic white balance


Umbes selliselt v&otilde;iksid asjad liikuda
Raimond: K&auml;isin p&auml;eval projektijuhtimise osas konsultatsiooni saamas. Sain hunniku v&auml;ikseid &uuml;lesandeid, millest osa tegime T&otilde;nisega t&auml;na &auml;ra. N&auml;iteks liikumis- ja p&ouml;&ouml;ramisk&auml;sud, mis j&auml;rgivad saadetud kiirusprotsente. Panin hetkel maksimaalseks p&ouml;&ouml;rlemiskiiruseks ka 0.4m/s, kuid t&otilde;en&auml;oliselt on see rohkem. Testisin ka p&auml;rast v&auml;ljaku peal ning selgus, et hetkeparameetritega on 10-15% see miinimumpiir, kust robot hakkab p&ouml;&ouml;rlema. Ning 70% see piir, kust robot hakkab otse s&otilde;itma.
Bindisin &auml;ra numbriklahvid 1, 2, ..., 0, et nende all oleks v&otilde;imalik manuaalselt saadetavate k&auml;skude kiirust kiiresti seadistada. 1=15%, 2=20%, 3=30%, ..., 9=90%, 0=100%.
Pildit&ouml;&ouml;tluse osas selgus samuti suur hulk infot. Esiteks, hetkel tuvastatakse pallideks ka valged jooned v&auml;ljakul ja v&auml;ravad (k.a. nende &auml;&auml;red). Seega on oranži l&auml;vendid paigast &auml;ra, l&auml;hitulevikus on plaan neid seadistada t&auml;psemaks. Samuti ei t&ouml;&ouml;tanud Lubuntu peal selline k&auml;sk nagu Enumerable.OrderByDescending(), mida kasutasime, et pildit&ouml;&ouml;tluses v&otilde;tta k&otilde;ige suurem (seega t&otilde;en&auml;oliselt k&auml;ige l&auml;him) objekt, mis on pallina tuvastatud.
Kuna esitati k&uuml;simus, et mis info tuleb pildit&ouml;&ouml;tlusest ja l&auml;heb olekumasinasse, siis see oleks j&auml;rgnev:
class VisionData{
 bool FrontBallPathObstructed
 bool TrackingBall
 Point TrackedBallLocation
 short? OpponentGoalOffset
 bool OpponentGoalInFront
}
V&auml;ljakul testimisel avastasin, et v&auml;ljakust &uuml;les poole j&auml;&auml;v ala j&auml;&auml;b kuidagi roosakas. Uurisin veidi ja v&otilde;tsin v4l2ucp paneelist automaatse white balance'i maha ning too l&auml;ks korda. Enne tuli robot suunata laepoole, et ta paneks balansi normaalseks. T&otilde;en&auml;oliselt v&otilde;iks edaspidi mingit valget lehte n&auml;idata robotile ja siis v&otilde;tta white balance maha vms.
Videot hetkel teha ei &otilde;nnestunud, sest lindistamisprogrammid crashisid...
Samuti rakenduse k&auml;ivitamisel tuleb millegip&auml;rast hoida k&auml;tt kaamera ees, muidu sulgub programm kahtlase erindiga. Marti uurib asja...
Mehaanika/elektroonika poolepealt on vaja teha j&auml;rgnevad asjad:
-Plunger j&auml;&auml;b rulliku taha kinni, n&ouml;&ouml;ri on vaja l&uuml;hemaks siduda
-Robotile v&otilde;iks LED-id peale panna, et oleks olekut h&auml;sti n&auml;ha testimisel
-Robot liigub kohati veidi aeglaselt, mootorid tuleks &uuml;le vaadata, et ei oleks sealt takistust (&otilde;litada jne)
-Tagumine ja parem mootor &auml;ra vahetada
Hommikul sai koostatud &uuml;ks plokkdiagramm mootorite juhtimise koodi voo kohta... Praeguseks on too diagramm k&uuml;ll juba aegunud (sest enam pole n&auml;iteks t&otilde;ev&auml;&auml;rtust, mis pidAlphat v&auml;lja l&uuml;litab), kuid mingi reference value on ehk ikkagi...

[redigeeri] 28. oktoober
Raimond: K&auml;isin tegemas pildit&ouml;&ouml;tluse jaoks testvideoid v&auml;ljakul. Salvestasin &auml;ra ka m&otilde;ningad kaameraparameetrite v&auml;&auml;rtustused. Siiski mingil p&otilde;hjusel neid laadides n&auml;iteks valgebalanss ei l&auml;inud automaatselt selleks, mis ta enne tundus olevat. Leian, et normaalne tulemus v&otilde;iks olla siis, kui valgebalansi temperatuur on 2800 peal ehk suht madalal.
Proovisin ka fookust veidi s&auml;ttida. Ei tundunud omavat v&auml;ga suurt vahet, kas on fookus 0 v&otilde;i 85 peal... Samas suuremaks t&otilde;stes l&auml;ksid pallid juba uduseks. Fookus peakski tegelikult olema vist l&otilde;pmatusse ehk 0-i pandud?


Valgebalansi temperatuur on 4038, &uuml;lemised &auml;&auml;red on roosad


Valgebalansi temperatuur on 2800, &uuml;lemised &auml;&auml;red on okeid


Fookus nullis...
Harti: tegin t&auml;is paar &uuml;lesannet
vahetasin &auml;ra parema ja tagumise mootori
&otilde;litasin tagumise mootori k&auml;igukasti
l&uuml;hendasin s&uuml;damiku liikumisepiirajat - n&ouml;&ouml;ri
vaidlesin Raimondiga LEDide vajalikkuse &uuml;le
5V pingeregulaatorile panin termopastat
vahepeal &auml;ra v&otilde;etud tagumise seina panin ka tagasi
[redigeeri]29. oktoober
Raimond: Tegime Hartiga koos terve p&auml;eva PID-i ja kinematicsid &uuml;mber ning n&uuml;&uuml;d k&otilde;ik paistab t&ouml;&ouml;tavat j&auml;lle. Taastasime ikkagi PID-id x ja y-teljes liikumise kiiruste kohta. Vastasel juhul (ainult pidAlpha't kasutades) ei oleks saanud seismist kontrollida.
Kinematicsid vajasid konkreetseid kiiruseid, seega m&otilde;&otilde;tsime ja arvutasime muu hulgas n&auml;iteks seda, et kui kiiresti liigub iga ratas (m/s) ja mitu p&ouml;&ouml;ret minutis see on. V&auml;ljastuse l&otilde;ik:
SPEEDS: left: 25.79    right: 24.96    back: 25.21   //sentikraadi millisekundis
CALCULATIONS: left: 429.96    right: 416.13    back: 420.21  //p&ouml;&ouml;ret minutis
Edasi vaatasime ka n&auml;iteks roboti liikumiskiirusi x ja y-teljel eraldi.
CURRENT: vx: 0.67    vy: 0.00    theta: -0.01    
CURRENT: vx: 0.67    vy: 0.00    theta: -0.01    
 
CURRENT: vx: 0.00    vy: -1.15    theta: 0.00    
CURRENT: vx: 0.00    vy: -1.15    theta: 0.00
P&auml;rast rohkeid arvutusi nii paberil kui ka Exceli tabelis, saime kinematicsid korda. Seej&auml;rel pidi Harti &auml;ra minema ning siis koos T&otilde;nisega parandasime vigu, mis olid sisse tulnud (paar m&auml;rki valetpidi jm). Mingil p&otilde;hjusel j&auml;i hetkel nii, et TurnLeft juures pean ma soovitava theta jaoks korrutama l&auml;bi negatiivse kiirusega ning TurnRight juures saama theta positiivse. Tegelikult peaks olema vastupidi (rataste p&ouml;&ouml;rlemised vastup&auml;eva peaksid olema positiivsed).
Seej&auml;rel saime igatahes asja niikaugele, et PID &uuml;ritab hoida kurssi ja korrigeerida. Hetkel k&uuml;ll suht robustselt, kuid see on n&uuml;&uuml;d parameetrite seadistamise k&uuml;simus.
Harti Enne Raimondi saabumist j&otilde;udsin veel tegeleda arvuti kinnitustega, puurisin pol&uuml;karbonaati auke. N&uuml;&uuml;d on &uuml;ks 3,3mm puur laboris v&auml;hem. Nimelt j&auml;i mul puur auku kinni ning l&auml;ks katki. M&otilde;tlesin algul kuumutamist proovida, et &auml;kki &otilde;nnestub v&auml;lja saada, aga nagu mulle meenus eelmisest aastast, siis Mattist see meetod ei aidanud. Puurisin hoopis uue puuriga teiselt poolt augu vastu ja l&otilde;in improviseeritud torniga puuri materjalist v&auml;lja. Natuke tegemist oli, kuid k&auml;tte ma puuri sain.
[redigeeri]30. oktoober
T&otilde;nis: K&auml;isime Hartiga koos laboris. Testisime kolmanda korruse v&auml;ljakul PID'i. ARDUINO koodis kommenteerisime v&auml;lja automaatse stopk&auml;su saatmise. PID'i testimise k&auml;igus lakkas meie serial juhe t&ouml;&ouml;tamast (mootoriteplaadilt enam infot ei edastunud ArduinoIDE serial monitori kaudu). Proovisime juhet &otilde;iget pidi ja valet pidi, enamasti viimast, aga infot ei tulnud.
Otse suunas oskas robot v&otilde;rdlemisi h&auml;sti hoida sirget s&otilde;idusuunda. Vasakule/paremale suunas liikudes aga ei olnud PID p&auml;dev, nimelt s&otilde;itis ta mitte otse vasakule/paremale vaid kaldus trajektorilt taha-suunas, nii et ta liikus kaarjalt vasakule-taha ja paremale-taha. P&ouml;&ouml;rlemine t&ouml;&ouml;tas ilusti.
Harti leidis, et v&otilde;iks roboti liikumise teha globaalse XY-koordinaatteljestiku (v&auml;ljaku XY-telgede) j&auml;rgi, aga see kuulub veel arutlusele.
M&otilde;tlesime ka veel seda, et me kasutame PID'e X-suunas liikumisele, Y-suunas liikumisele ja Theta-suunas liikumisele. Kas me peaksime kasutama ka/v&otilde;i Alpha suunas liikumis ja vastavat PID'i ?
Suhtlesin ka Alvo Aabloga, oli j&auml;rgnev Dialoog:
[3:03:39 PM EEST] Alvo Aabloo: theta annab teile info, palju lokaalne X-Y p&ouml;&ouml;rdub globaalse suhtes
[3:03:51 PM EEST] Alvo Aabloo: kui robot hakkab ilma p&ouml;&ouml;rlemata triivima, siis on alpha puudu
[3:04:02 PM EEST] T&otilde;nis Terasmaa: ahhaaa, okei
[3:04:14 PM EEST] Alvo Aabloo: seda saab peale vaadates aru
[3:04:17 PM EEST] T&otilde;nis Terasmaa: see t&auml;hendab et me peaksime alphat kasutama
[3:04:52 PM EEST] Alvo Aabloo: kui p&ouml;&ouml;rleb siis theta
[3:05:08 PM EEST] Alvo Aabloo: kui ei p&ouml;&ouml;rle siis alpha
[3:05:34 PM EEST] T&otilde;nis Terasmaa: ok
[3:05:40 PM EEST] Alvo Aabloo: theta on vajalik ka siis kui keski sisse s&otilde;idab
[3:05:50 PM EEST] Alvo Aabloo: ja j&otilde;uga &auml;ra p&ouml;&ouml;rab teid
[3:06:48 PM EEST] Alvo Aabloo: vale suund on sisses&otilde;itmisel palju t&uuml;likam kui lihtsalt kuhugi &auml;ra l&uuml;kkamine
Harti Ma ei olnud ikka veel rahul roboti kiirusega. Vaip on pehmem, kui eelmisel aastal ja robotil raskem liikuda. Tundus et miski j&auml;&auml;b aegajalt vaiba taha kinni. Tegin p&otilde;hja v&otilde;imalikult siledaks, v&otilde;tsin &auml;ra viimased mutrid, mis eelmisel aastal sinna olid j&auml;&auml;nud. St. s&uuml;vistasin poldi pea jaoks pesa ja mutter l&auml;ks hoopis &uuml;les poole roboti sisemusse. V&otilde;tsin &auml;ra ka hiire.
Roboti s&otilde;idab meil n&uuml;&uuml;d platsi &uuml;hest otsast teise 13,5 sekundiga.
[redigeeri] N&auml;dal 31. oktoober - 6. november

[redigeeri] 31. oktoober
Harti: V&otilde;tsime kasutusele g&uuml;ro. T&otilde;nis ajas oma arvuti peale suppi. Harti Installis oma arvutisse Arduino softi.
Raimond: Saime roboti ka k&uuml;lgsuunas otse liikuma kasutades pidTheta juures sisendiks g&uuml;rolt v&otilde;etud nurkkiirust. PID-i parameetrid j&auml;id Theta jaoks hetkel (0.2, 0.1, 0).
Ilmnesid j&auml;rgnevad vead, mida &uuml;ritame homme lahendada:
Optokatkesti ei t&ouml;&ouml;ta
Seisma j&auml;&auml;des hakkab robot vibreerima (Karl soovitas panna PID-ile juurde "lubatud viga", mille korral &ouml;eldakse, et viga on 0).
P&ouml;&ouml;rleb aeglaselt (T&otilde;en&auml;oliselt on p&ouml;&ouml;rlemiskiirus 0.4 radiaani sekundis liiga v&auml;ike arv).
Marti lubas pildit&ouml;&ouml;tluses j&otilde;uda valmis kolmap&auml;evaks v&auml;ravate tuvastuse, pallide parema leidmise ja Lubuntus esinenud vigade paranduse.
Harti: See optokatkesti tegi mullu ka mingil hetkel trikke, aga kui p&otilde;hjaliku testimise j&auml;rel seal &uuml;htegi viga ei leidunud siis hakkas ta j&auml;lle t&ouml;&ouml;le. Meil on kapis &uuml;ks veel, nii et l&auml;heb see teine peale ning k&otilde;ik korras.
T&otilde;nis: nagu Harti mainis, ajasin t&ouml;&ouml;tavale laptopile peale suppi, j&auml;rgmised 2-3 tundi m&ouml;&ouml;dusid arvutit lahti v&otilde;ttes, puhastades ja tagasi kokku pannes. Aitasin ka Hartil oma laptopile vajalikke programme peale laadida, et oleks v&otilde;imalik ka temal vajaduse korral meie robotile koodi peale laadida. Peale oma laptopi kokkupanemist l&auml;ksin kolmandale korrusele Raimondile appi meie robotit testima (sellest Raimond ka juba r&auml;&auml;kis).
[redigeeri] 1. november
T&otilde;nis: Mihkel Pajusalu k&auml;is r&auml;&auml;kimas, et coiliplaadil KICK pini j&auml;rel on tavaline npn-transistor, ning kui koodis kirjutada KICK pin madalaks, et coilgun l&ouml;&ouml;ks, siis peale l&ouml;&ouml;ki j&auml;&auml;b see npn-transistor ka madalaks ning sellega seoses on koguaeg atmegal +5V peal (see on vist halb nagu ma aru saan). Et seda v&auml;ltida tuleb panna mittel&ouml;&ouml;mise ajaks KICK pin INPUT'ks. Teine v&otilde;imalus seda viga parandada on asendada see tavaline npn-transistor n-MOSFET'iga.
Muutsime Coiliplaadi koodi vastavalt Mihkel Pajusalu juhistele. Testisime, tundus et t&ouml;&ouml;tab.
Selline probleem: kui robotil on vool sissel&uuml;litatud, siis kui t&otilde;mmata laptop'ilt arduino usb juhe k&uuml;ljest ja uuesti sisse pista, siis tekib kusagil mingine l&uuml;his/m&uuml;ra signaal, et coilgun automaatselt laseb korra, ning peale seda teeb kondekas imelikku h&auml;&auml;lt ning peale 2-3 sekundit hakkab korralikult t&ouml;&ouml;le. Harti v&otilde;iks sellele asjale mingisuguse lahenduse v&auml;lja m&otilde;elda (kui probleem seisneb elektroonikas, &auml;kki tekitabki see npn-transistor selle vea).
Raimond andis ka j&auml;rgmise taski, et mootoriteplaat saadaks v&auml;lja andmepaketi, kus oleks kirjas, kus me asume globaalse X ja Y suhtes ning ka meie gyro m&otilde;&otilde;detud nurk, mille all me oleme v&auml;ljaku X ja Y suhtes. Ning v&otilde;iksin ka uurida miks tuli meile ulmeline gyro n&auml;it (ala 17233).
Harti variant 1, &auml;kki siis ei tee nii!? edasi, mida teeb Arduino, kui talle voolu anda kas ta &auml;kki testib oma pinnid &uuml;le ja seadistab nad m&otilde;neks ajaks k&otilde;rgeks. Selle kirjelduse j&auml;rgi, ning oma eelmise aasta p&otilde;hjalikele kogemustele ELMAk&otilde;ksi plaadiag v&otilde;in &ouml;elda, et kondekas lasti t&uuml;hjaks ja m&auml;his j&auml;i &uuml;hendatuks, kui trafo pinge l&auml;heb otse tarbijasse (m&auml;hisele) siis ta teebki imelikku h&auml;&auml;lt. Ma pakun siis, et see v&auml;ljund kust coiliplaat k&auml;su saab l&auml;ks k&otilde;rgeks ja oli seda paar sekundit.
Probleem selle transistoriga oli minu meelest see, et seal pole baasi ja emitteri ahelas midagi vahel ja vool l&auml;heb suureks ning transistor v&otilde;ib sedasi l&otilde;puks l&auml;bi p&otilde;leda. Muidugi v&otilde;isin ma ka valesti aru saada. Kuid 5V j&auml;&auml;b atmegale ka siis peale, kui transistor MOPi vastu vahetada.
[redigeeri] 2. november
T&otilde;nis: Tegelesin siis selle WireSenderiga (mootoriteplaat peab saatma arduinole paketi, mis sisaldaks meie globaalset X ja Y koordinaati ning gyrolt saadud globaalset nurka). Tegin Wheels.cpp faili sellise koodi:
       double time = millis() - timePrev;
       timePrev = millis();
       double angle = gyroAngle * 0.0174533;
       double distY = currentVY * time;
       double distX = currentVX * time;
       double localX, localY, localTheta;
       localX += sin(angle) * dist;
       localY += cos(angle) * dist;        
       double worldX = localX * sin(angle) - localY * cos(angle);
       double worldY = localX * cos(angle) + localY * sin(angle);
       worldCurrentX += worldX;
       worldCurrentY += worldY;
See kood peaks arvutama v&auml;lja roboti globaalsed X ja Y.


Tr&auml;kitav ala on liiga suureks veninud


Olekud palli otsimise ja pallini s&otilde;itmise vahel vahetuvad liiga kiiresti


Tekkis avarii ja kaamera USB kadus &auml;ra, pilt tardus
Harti: n&uuml;&uuml;d v&otilde;id lokaalsete koordinaatide summeerimise maha v&otilde;tta, seda oli mul ainult siit vigade v&auml;ljajuurimiseks vaja.
Raimond: Sain Marti k&auml;est pildit&ouml;&ouml;tluse, millega esines suht palju probleeme. Esimene suurem mure on see, et millegip&auml;rast Robin.Core.dll tehakse projekti p&otilde;hikausta mingi veider, kus ei ole (v&otilde;i ei saada k&auml;tte) &otilde;iget faili sisu. Robin.Core projekti oma output kaustas on &otilde;ige .dll olemas, seega iga kord, kui toimub kompileerimine, peab praegu seda faili sealt kopeerima.
Peale seda kui Marti oli TeamVieweriga &uuml;ritanud seda ning &uuml;hte sorteerimisprobleemi lahendada, l&auml;ksin testisin v&auml;ljakul. Esimene suurem mure seal oli too, et millegip&auml;rast tr&auml;kitava palli kast venis pika peale poole pildikaadri laiuseks. Selle v&auml;ltimiseks tegin ka maksimaalse suuruse tr&auml;kitavatele kastidele, millest suurema korral me enam ei tr&auml;ki.
Teine mure oli see, et millegip&auml;rast oli tr&auml;kkimine l&uuml;nklik. Kollane kast palli &uuml;mber vilkus ning robot vaheldus pidevalt palli otsimise ja palli poole liikumise olekute vahel.
Closing in on ball
Ball: TopCenterLeft
Looking for ball
Looking for ball
Closing in on ball
Ball: TopCenterLeft
Looking for ball
Closing in on ball
Kolmandaks oli probleeme sellega, et USB seadmed kadusid k&uuml;ljest &auml;ra. N&auml;iteks siis kui Nasty robot korraks m&uuml;ksas v&otilde;i siis vahepeal ka suht niisama.
Looking for ball
libv4l2: error dequeuing buf: No such device
VIDIOC_DQBUF: No such device
Erind: Resource temporarily unavailable
System.IO.IOException: Resource temporarily unavailable
 at System.IO.Ports.SerialPortStream.ThrowIOException () [0x00012] in /home/robin/mono-src/mono/mcs/class/System/System.IO.Ports/SerialPortStream.cs:313 
 at System.IO.Ports.SerialPortStream.Read (System.Byte[] buffer, Int32 offset, Int32 count) [0x0008d] in /home/robin/mono-src/mono/mcs/class/System/System.IO.Ports/SerialPortStream.cs:152 
 at System.IO.Ports.SerialPort.read_byte () [0x00007] in /home/robin/mono-src/mono/mcs/class/System/System.IO.Ports/SerialPort.cs:626 
 at System.IO.Ports.SerialPort.ReadByte () [0x00006] in /home/robin/mono-src/mono/mcs/class/System/System.IO.Ports/SerialPort.cs:635 
 at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPort:ReadByte ()
Aga samas palle ja v&auml;ravaid tuvastas h&auml;sti. Pallini s&otilde;ita ei saanud normaalselt, kuna j&auml;rgmisel momendil kaotati pall j&auml;lle &auml;ra... Kuid m&uuml;ra leiti tunduvalt v&auml;hem kui eelmine kord.
[redigeeri] 5. november
Raimond: Sain korda Mootorite Plaadist saadetava info (eeldatav globaalne X, Y ja nurk) t&ouml;&ouml;tlemise r&uuml;peraalis. Eelnevalt loeti neid v&auml;&auml;rtusi veidi valede baitide pealt paketist.
Panin k&uuml;lge ka LED-riba, et testimisel n&auml;ha, mida robot mingil hetkel m&otilde;tleb, kuid p&otilde;levad ainult punased LED-id ja seda siis, kui Arduino saadab v&auml;lja, et p&otilde;lema tuleks panna sinised v&otilde;i muudv&auml;rvi LED-id. Tundub, et kaane all olevas LED-ide ja vooluplaadis on midagi veidi valesti.
Tegin paar skeemi, kust hiljem on hea vaadata roboti olekuid. Olekuid (ja neile vastavaid v&auml;rve) saab vaadata ka esilehel olevalt skeemilt.
Pakkisin roboti kodust toodud kasti ja v&otilde;tsin kaasa, et homme hommikul ei peaks laborist l&auml;bi tulema.
[redigeeri] 6. november
Raimond: K&auml;isime Tallinnas eelv&otilde;istlusel. Komponentide suhtlusprobleemi venimise lahendamiseks t&otilde;stsime Arduinole pakettide saatmise ja vastuv&otilde;tmisse eraldi l&otilde;imedesse. Pildit&ouml;&ouml;tluse kiiruse t&otilde;stmiseks v&auml;hendasime kaadri suurust 320x240 peale. V&otilde;istluse ajal robot ei s&otilde;itnud ja mootorid l&uuml;litusid v&auml;lja... 5 minutit hiljem j&otilde;udsime selgusele, et LiPo oli t&uuml;hi (+6V).
[redigeeri] N&auml;dal 7.-13. november

[redigeeri] 7. november
Harti: et aku t&uuml;hjenemisest aru saada koostasin sellise skeemi.


Siin l&auml;heb LED p&otilde;lema, kui pinge langeb alla 10V. Selle skeemi saab ilusti realiseerida eelmise aasta LIPOkaitse plaadi abil.
&Otilde;htul helisatas Helina ja kutsus laborisse. L&auml;ksin. Jootsin hommikul t&ouml;&ouml; juures v&auml;ljam&otilde;eldud skeemi lipoplaadile kokku. Panin veel &uuml;he LEDi juurde, et t&auml;is akuga ka mingi tegevus n&auml;ha oleks. Tulemus sai nii, et kui aku on t&auml;is p&otilde;leb sinine ja kui aku alla 10V hakkab p&otilde;lema roheline LED. Tunnistan, et v&auml;rvikodeering oleks v&otilde;inud teine olla, aga punast LEDi polnud.
12 .. 10V SININE
10 .. 5V ROHELINE
[redigeeri] 8. november
Raimond: Tegin &auml;ra selle, et USB &uuml;henduse katkemisel &uuml;ritatakse uuesti &uuml;hendust v&otilde;tta sama pordiga (juhul, kui ei ole Disconnecti vajutatud). Testisin seda ja tundub t&ouml;&ouml;tavat: t&otilde;mbasin juhet mitmeid kordi &auml;ra ja &uuml;hendasin tagasi, p&auml;rast igat &uuml;hendamiskorda oli v&otilde;imalik uuesti saata liikumisk&auml;ske robotile ja Arduino enda paketid j&otilde;udsid ka l&auml;pakani kohale. Mingitel hetkedel oli korraks see, et uuesti k&auml;skude saatmise juures oodati paar sekundit. Hetkel arvan, et see oli juhuslik anomaalia.
K&auml;skude kuhjumise probleem tundub ka olevat lahenenud sellega, et andmevahetus on kahes l&otilde;imes. Panin liikumisk&auml;skude klahvidele peale v&auml;ikese ajalimiidi (150ms), mille tagant saab j&auml;rgmis k&auml;sku saata. N&uuml;&uuml;d v&otilde;ib veidi rohkem hoida klaviatuurilt klahvi all ja puhver ei saa t&auml;is.


T&otilde;mbasin USB-i v&auml;lja ja panin tagasi sisse


Manuaalse kontrolli &uuml;lev&otilde;tmise ja Ledide vilgutamise režiimi nupud
Seda k&otilde;ike tuleks n&uuml;&uuml;d testida v&auml;ljakul (reaalses situatsioonis) l&auml;hiajal.
Tegin ka selle, et GUI-st on v&otilde;imalik v&auml;lja l&uuml;litada olekumasinat eesm&auml;rgiga saata manuaalseid juhtimisk&auml;ske nii, et olekumasinast tulnud k&auml;sud ei segaks. Samuti ka selle, et on v&otilde;imalik peale panna LED-ide režiim, kus vilgutatakse erinevaid v&auml;rve. On v&otilde;imalik saata ka LED-ide p&otilde;lema panemise k&auml;ske klaviatuurilt.
Madala taseme koodi poolelt oli see viga, et leds_setup() oli v&auml;ljakommenteeritud. Sellep&auml;rast juhtus nii, et &uuml;hendused, mille otsas LED-id on, ei olnud m&auml;&auml;ratud v&auml;ljund&uuml;hendusteks ning seet&otilde;ttu v&otilde;is Harti vabalt m&otilde;&otilde;ta 1.6V nende pealt. Kuigi mina isiklikult m&otilde;&otilde;tsin praegu kahelt 0V ja &uuml;helt 5.6V statsionaarselt. V&otilde;tsin leds_setup() eest kommenteerimise &auml;ra ja seej&auml;rel LED-id vilkusid, kuid valede v&auml;rvidega. Elektroonika vea lahendamiseks saab kasutada klaviatuuriklahve y, u, i, o, h, j, k. Kasutajaliideses n&auml;itab, millise v&auml;rvi k&auml;sk saadeti.
Tegin ka shelli skripti roboti r&uuml;peraali t&ouml;&ouml;lauale, millega saab k&auml;ivitada rakenduse ilma MonoDevelopit ennast k&auml;ivitamata. Shelli skriptis kopeeritakse &uuml;le Robin.Core.dll, sest mingil p&otilde;hjusel ei tee MonoDevelop seda automaatselt. Seej&auml;rel pannakse LD_LIBRARY_PATH'i mono-2.10 teekide kataloog. Ja viimaks avatakse xterm, milles jooksutatakse mono-2.10'ga meie rakendust. Xtermi kasutamine on sellep&auml;rast, et rakendus saadab konsooli teateid oma tegevuste kohta ning ilma konsoolita ei oleks neid n&auml;ha.
[redigeeri]9. november
Harti Ostsin poest suure l&auml;bipaistva termor&uuml;&uuml;ži, kuhu lipokaitse plaat ilusti sisse mahtus ning panin ta robotile peale. Robotil oli ratta v&otilde;lli kinnituskruvi lahti logisenud ja keerme &auml;ra rikkunud. Panin sinna uue augu ja keerme ning suurema seadekruvi (M4).
[redigeeri]10. november
Raimond: T&otilde;in 5 punast SMD LED-i, kuna LiPo kaitse plaadil v&otilde;iks meie meelest aku t&uuml;hjenemisel p&otilde;lema minna ikkagi punane LED, mitte roheline.


T&otilde;nis n&auml;itab robotile palli


...


Vahepeal on pildit&ouml;&ouml;tlus veidi kokku jooksnud
Testisime T&otilde;nisega Marti poolt saadetud pildit&ouml;&ouml;tlust. Alguses oli probleem selles, et FPS l&auml;ks aja m&ouml;&ouml;dudes alla (1-2 peale). Selle lahendamiseks soovitas Priit meil &auml;ra v&otilde;tta k&otilde;ik Thread.Sleep()'id ja panna hoopis taimerid. Tegin selle &auml;ra ja FPS-i probleem sai lahendatud. Seej&auml;rel oli FPS normaalselt 15-16 ringis.
Edasi tekkis probleem sellega, et kaamera pildil oli sees l&auml;&auml;g umbes 1-2 sekundit. See t&auml;hendab, et pall oli juba reaalselt roboti eest &auml;ra nihkunud, kuid pilt n&auml;gi ikka veel palli. &Uuml;ks teooria on selles, et &auml;kki v4l j&auml;ttis ikkagi sisse enda automaatsed valgebalansi korrigeerimised, kuigi ma v&otilde;tsin need v4l paneelist maha. Too paneel &uuml;hel hetkel ei suutnud kaameraga enam &uuml;hendust luua... Priit jagas rea konsoolik&auml;ske, mis neid parameetreid seadistavad. Kavatsen panna need k&auml;sud n&auml;iteks meie kestaskripti faili.
T&otilde;nis tegi seda, et otsustasime liikumise ja p&ouml;&ouml;ramise juures kasutada pidThetal erinevaid parameetreid. Liikumisk&auml;skude puhul kasutame neid parameetreid, mis praegu on olemas, kuid p&ouml;&ouml;ramisel panime l&otilde;dvema P-parameetri ja I ning D on seal praegu nullid. Sellega saavutasime seda, et p&ouml;&ouml;ramine on veidi rohkem sujuvam.
P&ouml;&ouml;ramise katkendlikkust p&otilde;hjustas ka see, et Arduino saatis vahepeal stop k&auml;sku. Muutsime Arduino stop k&auml;su saatmise intervalli 1 sekundi peale p&auml;rast viimase liikumisk&auml;su tulemist. L&auml;pakast saadame hetkel v&auml;lja k&auml;ske iga 700ms tagant, sest vastasel korral ei j&otilde;udnud pildit&ouml;&ouml;tlus &uuml;ldse j&auml;rgi (l&auml;&auml;gi t&otilde;ttu).
Avastasin ka veel, et g&uuml;ro n&auml;iduga on midagi veidi valesti. Kui kohapeal p&ouml;&ouml;rasin robotit, siis &uuml;hes suunas keskmise kiirusega p&ouml;&ouml;rates (erines, kas p&auml;ri- v&otilde;i vastup&auml;eva) ei muutnud nurk &uuml;ldse. Teises suunas t&ouml;&ouml;tas.
LiPo kaitse plaat ei t&ouml;&ouml;ta ka p&auml;ris korralikult, sest n&auml;itas kogu testimise jooksul vahetevahel sinist tuld ja vahetevahel rohelist. Enamiku aja oli roheline.
[redigeeri]11. november
Harti: Tegin t&auml;na j&auml;rgnevad asjad:
panin lipoplaadile uued LEDid. N&uuml;&uuml;d on nii, et kui aku on t&auml;is, p&otilde;leb roheline ja kui t&uuml;hjaks saab l&auml;heb p&otilde;lema punane. See olukord mida Raimond kirjutas vastab t&auml;pselt t&uuml;hjale akule. Pinge langes lihtsalt alla 10V ja oligi k&otilde;ik. Hiljem aku veidi taastus pinge t&otilde;usis ja s&uuml;ttis teist v&auml;rvi tuli.
puurisin kaane sisse 2 uut auku ja keermestasin &auml;ra ning keerasin LEDide raami kaane k&uuml;lge kinni.
LEDide juhtmed jootsin &otilde;igeks, et arvutis &ouml;eldud v&auml;rv vastaks ka tegelikult p&otilde;lema minevale v&auml;rvile. Millegi p&auml;rast polnud Raimond n&otilde;us seda koodis &auml;ra muutma. &Uuml;tles, et see on riistvara viga ja seda ta tarkvaras muutma ei hakka...
meil on tagumine mootor natuke kange. Tema sisetakistus on suurem, kui teistel ja seet&otilde;ttu kisub robot k&uuml;lgsuunas s&otilde;ites alati natuke viltu. Peale paljusid katseis seda probleemi PIDiga parandada m&otilde;tlesin v&auml;lja t&ouml;&ouml;tava lahenduse. Korrutame tagumise mootori PWMi 1,5ga l&auml;bi, nii on tal kohe algusest peale suurem p&ouml;&ouml;rdemoment ja s&otilde;itma hakates robot enam viltu ei kisu.
[redigeeri]13. november
Raimond: Sain l&otilde;puks pildit&ouml;&ouml;tluse l&auml;&auml;gi p&otilde;hjustavale veale j&auml;rgi. Nimelt GTK TextField'i t&auml;itmine hakkas &uuml;hest hetkest &uuml;lej&auml;&auml;nud programmile suurt koormust p&otilde;hjustama. Lahenduseks proovisin k&otilde;ik Buffer.Text += / = v&auml;ljakutsed &auml;ra v&otilde;tta. Kuna siiski veidi oleks vaja n&auml;ha, mis v&auml;rk toimub, tegin praegu iga 4-5 sekundi tagant v&auml;ljakutsutava koodiosa, mis nii dataSend kui dataReceive v&auml;ljad t&uuml;hjaks teeb.
Tundus, et pildit&ouml;&ouml;tlus l&auml;ks sellest kiiremaks k&uuml;ll. Siiski ei ole veel asi p&auml;ris optimaalne, v&auml;hemalt mitte liikumisk&auml;skudega koosk&otilde;las... Peab veel tuunima liikumisk&auml;ske.
Probleem on ka g&uuml;roga, et &uuml;hele poole robotit p&ouml;&ouml;rates nurk muutub ja teisele poole mitte. Kuna g&uuml;ro j&auml;rgi n&auml;iteks v&otilde;etakse suund vastase v&auml;rava poole, siis v&auml;ravasse l&ouml;&ouml;mine j&auml;i hetkel probleemseks. &Uuml;ritasin teha ka seda, et kui vastase v&auml;rav on keskel, siis me enam robotit ei p&ouml;&ouml;ra (saadame vahepeal stop k&auml;su; ootame 500ms), sest vahepeal tulistas robot p&ouml;&ouml;ramise ajal ja v&auml;ravast m&ouml;&ouml;da kaks korda. Kuid tundus, et ka sellesse said m&otilde;ned bugid.
[redigeeri] N&auml;dal 14.-20. november

[redigeeri]14. november


N&auml;itame viimast viit k&auml;sku m&otilde;lemas teksiv&auml;ljas
Raimond: Testisime T&otilde;nisega PID-i ja ikka on midagi valesti, sest esiteks on kiirus liiga v&auml;ike ja teiseks ei saa PID m&otilde;nikord &otilde;iet nurkkiirust g&uuml;rolt. Samuti ei muutu endiselt m&otilde;nikord g&uuml;ro nurk normaalselt.
Kiirused saime pikapeale (predefineeriud maksimaalseid kiiruseid suurendades) paika ning sujuvalt liikumine t&ouml;&ouml;tab ka juhul, kui g&uuml;ro otsustab normaalselt nurgamuutust saata.
Tegin &auml;ra selle, et enam mitte ei tee saadetud ja vastuv&otilde;etud k&auml;skude akente puhvreid t&uuml;hjaks, vaid hoiame m&auml;lus ja kuvame ainult 5-te viimast k&auml;sku. Pildit&ouml;&ouml;tlus paistab sellele vastu pidavat.
[redigeeri]15. november
Raimond: Muutsin g&uuml;ro koodi Karl Tarbe soovituste j&auml;rgi ja oma peaga m&otilde;eldes erinevatest kohtadest ja proovisin mitmeid asju... L&otilde;puks tundub, et k&otilde;ige parem tulemus j&auml;i nii, kui ma mitte ei vaata nurkkiiruse arvutamise juures, kas uus nurkkiirus on m&uuml;ravahemikust v&auml;ljas, vaid teen seda juba siis, kui nurkkiirust loetakse.


Nurk p&auml;rast robotiga ohtralt ringi s&otilde;itmist 357 kraadi


Alustasin ja l&otilde;petasin plaadivahega paralleelselt s&otilde;itmist
&Uuml;hes&otilde;naga, esmalt proovisin seda, et v&otilde;tan nurkkiiruseks kohe m&otilde;&otilde;detud tulemuse ja kalibreerimise ajal leitud keskmise m&uuml;ra vahe. Kuid see p&otilde;hjustas millegip&auml;rast ikkagi triivi &uuml;hes suunas. Uurisin keskmise v&otilde;tmise algoritmi ja ei n&auml;e k&uuml;ll, et seal viga oleks. Vaatasin veidi ka neid t&auml;helepanekuid, et kohe roboti k&auml;ivitamise momendil ei &uuml;ritataks kalibreerida ning et kalibreerimisel oleks piisavalt m&otilde;&otilde;tmistulemusi.
Koodi vaadates selgus, et:
Kalibreerima hakkame 300ms p&auml;rast programmi k&auml;ivitamist. Muutes seda suuremaks, ei l&auml;inud midagi paremaks.
Kalibreerime kuni on saadud k&auml;tte 1024 m&otilde;&otilde;tmistulemust. Muutes seda suuremaks, ei l&auml;inud samuti midagi paremaks.
Kalibreerimine ise v&otilde;tab aega 5115ms, mille ajal robotit ei tohiks segada. V&otilde;imalik, et riistvaraline SPI sealkohas muudaks asju paremaks.
Igal juhul, vaatasin, et m&otilde;&otilde;tmistulemus p&auml;rast keskmise m&uuml;ra (n 4.05) mahalahutamist varieerub suuremas osas vahemikus [-1.2; 1.2]. Ja tundus, et tegu ei ole siiski normaaljaotusega, vaid on kuskile poole kallutatud. Seega otsustasin v&otilde;tta uut m&otilde;&otilde;tmistulemust alles siis arvesse, kui tema absoluutv&auml;&auml;rtus on &uuml;le 1.25.
Tundub, et see andis t&auml;itsa okei tulemuse.
Parandasin veidi ka PID-i kordajaid ja SVN-i oli veits vana kood saanud, seega tegin seal ka m&otilde;ned uuemad muudatused &auml;ra. N&auml;iteks panin selle tagasi, et Stop k&auml;su puhul resetitakse k&otilde;ik vead &auml;ra. Ei tea praegu, kas muude k&auml;skude korral peaks ka resettima. Samuti v&otilde;tsin &auml;ra, et iga Move k&auml;su puhul saadeti k&otilde;igepealt stop k&otilde;igile ratastele... Ja muid pisivigu veel.
Homme tuleks testida v&auml;ljakul n&uuml;&uuml;dse t&auml;psema g&uuml;roga.
[redigeeri]16. november


Poolel maal v&auml;ljaku peal. S&otilde;idetud: 2580mm, M&otilde;&otilde;detud: 2813mm
Raimond: T&auml;pse g&uuml;ro n&auml;iduga p&ouml;&ouml;ras robot vastase v&auml;rava poole p&auml;ris h&auml;sti.
Jannoga asjade &uuml;le arutledes tekkisid m&otilde;tted, et &auml;kki pildit&ouml;&ouml;tlus on aeglane just selle ideoloogia t&otilde;ttu, mida Marti mulle BackgroundWorkerite kohta seletas. Ehk siis l&otilde;imed, mida tehakse taustal nii, et GUI ei muutuks aeglasemaks. P&auml;rast Martiga sellest r&auml;&auml;kides j&otilde;udsime j&auml;relduseni, et nii ongi... Selles threadis on veidi l&auml;hemalt seletatud, millal v&otilde;iks kasutada BackgroundWorkerit, millal ThreadPool'i ja millal tavalist Threadi. J&auml;rgmine samm on pildit&ouml;&ouml;tlus &uuml;mber panna jooksma tavalisel Threadil.
Testisin veel v&auml;ljaku peal magnetandurite info p&otilde;hjal leitud kordinaadi t&auml;psust ja leidsin kinnitust, et ega see ikka v&auml;ga t&auml;pne ei ole. V&auml;ljak on 4500mm pikk ja otse s&otilde;itma hakates sain l&otilde;puks lugemiks umbes 4800mm. Vasakule s&otilde;ites on v&auml;ljaku laius 3000mm, magnetandurid m&otilde;&otilde;tsid umbes 2800mm. Ja need m&otilde;&otilde;tmised olid otse &uuml;hest nurgast s&otilde;itma hakkamisel... Kui veel v&auml;ljakul ringi p&ouml;&ouml;relda ja erinevate nurkade all liikuda, siis v&otilde;ib tulla seda m&uuml;ra veelgi.
V&otilde;imalik, et &auml;kki see kordinaat on kehv, sest g&uuml;ro on liikunud mingid kraadid paigast &auml;ra ja roboti PID ei suuda teda p&auml;ris otse kogu aeg hoida ja veel mitmest p&otilde;hjusest tingitud... Kuid igatahes saame kasutada ainult ligikaudset globaalset positsiooni.
[redigeeri]17. november


Registreeritud
Raimond: Kogusin andmeid ja registreerisin Robotexile &auml;ra. Selgus, et v&otilde;istkonna liikmete arv on ilma juhendajata ning p&auml;rast pikka m&otilde;tlemist otsustasin, et meie robot kasutab pallide, v&auml;ravate ja v&auml;ljaku tuvastuseks siiski nii videopilti kui ka andureid.
Harti maksis k&otilde;ne Soomemaale kinni.
Katsetasin robotiga erinevate nurkade alla s&otilde;itmist ja tundub, et enam-v&auml;hem saab n&uuml;&uuml;d asjaga hakkama. Natukene kaldus sihist k&otilde;rvale ja p&ouml;&ouml;ras ehk liiga palju ennast viltu... T&otilde;nis uurib seda veel.
[redigeeri]18. november
T&otilde;nis: Testisin meie v&auml;ikese l&auml;paka pealt AVR ISP mkII programmaatoriga mootoriteplaadile koodi peale laskmist ning sain sellise erindi:
java.lang.NullPointerException
	at processing.app.debug.AvrdudeUploader.uploadViaBootloader(AvrdudeUploader.java:81)
	at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(AvrdudeUploader.java:56)
	at processing.app.Sketch.upload(Sketch.java:1603)
	at processing.app.Sketch.exportApplet(Sketch.java:1568)
	at processing.app.Sketch.exportApplet(Sketch.java:1524)
	at processing.app.Editor$DefaultExportHandler.run(Editor.java:2293)
	at java.lang.Thread.run(Thread.java:679)
Lasin robotil t&auml;ita v&otilde;istlus&uuml;lesannet, probleemiks oli see, et ta n&auml;gi asju ka v&auml;ljaspool v&auml;ljakut ning hakkas nende j&auml;rgi s&otilde;itma, k&otilde;ik sinised objektid v&auml;ljaspool v&auml;ljakut olid sinine v&auml;rav jne... Proovisin teha meie backAmplifierit paremaks... asendasin konstantse suuruse "1.5" hoopis "1+((sin(degree))*n)" vastu... Proovisin n erinevate v&auml;&auml;rtustega (0.5, 0.4, 0.3, 0.275, 0.25, 0.2) muutus ainult see kui suure kaare robot tegi... Video laadisin ka dropboxi.
[redigeeri]19. november
Harti: uurisin, miks sinised LEDid nii n&otilde;rgalt p&otilde;levad. Ei saanud aru. Kuid tegin korda. Veel justeerisime roboti odomeetriat ning sai ka mehhaanika vigu tarkvaras parandatud. N&uuml;&uuml;d vist juba v&otilde;ib! Viga on tagumises mootoris ja eelarve on niigi miinuses.
[redigeeri]20. november
T&otilde;nis: uurisin, et mis imelik anomaalia on see kui anname k&auml;su et liigu nurga all (n&auml;iteks 50 kraadise nurga all otse selle 50kraadi suunas). Alati enne selle k&auml;su flow l&otilde;ppu teeb mingi imeliku j&otilde;nksu. tuleb v&auml;lja, et arduino l&auml;heb vahepeal lolliks ning saadab mingeid ulmelisi kiiruseid.
K&auml;suks oli :
'M' 50 90
Serial.print v&auml;ljundiks olid j&auml;rgnevad:
// cmd.first desiredMoveSpeed desiredX desiredY
// millis() pidX(s, i, o) pidY(s, i, o) pidTheta(s, i, o) pidTheta(calculated P, I, D)

90 1.80 0.78 -0.66
7731  1.40 -1.04 -39.18   -1.18 0.75 29.85   0.00 0.00 0.00   0.00 0.00 0.00
7833  1.40 -1.04 -39.08   -1.17 0.79 29.73   0.00 0.00 0.00   0.00 0.00 0.00
7935  1.39 -1.02 -39.01   -1.17 0.81 29.63   0.00 0.00 0.00   0.00 0.00 0.00

90 1.80 0.78 -0.66
8037  1.40 -1.12 -38.73   -1.18 0.85 29.48   0.00 0.00 0.00   0.00 0.00 0.00
8139  1.40 -1.04 -38.74   -1.17 0.78 29.50   0.00 0.00 0.00   0.00 0.00 0.00
8241  1.39 -1.06 -38.62   -1.17 0.75 29.46   0.00 0.00 0.00   0.00 0.00 0.00

90 1.80 0.78 -0.66
8340  1.40 -1.04 -38.51   -1.18 0.78 29.33   0.00 0.00 0.00   0.00 0.00 0.00
8443  1.40 -1.02 -38.45   -1.17 0.81 29.22   0.00 0.00 0.00   0.00 0.00 0.00

23040 -194.56 0.14 1.02
8546  -27.05 -1.13 -82.14   -197.49 0.88 -214.61   0.00 0.00 0.00   0.00 0.00 0.00
8649  -27.05 -1.04 -83.49   -197.50 0.78 -222.67   0.00 0.00 0.00   0.00 0.00 0.00
8748  -27.05 -0.79 -85.05   -197.51 -0.48 -229.05   0.00 0.00 0.00   0.00 0.00 0.00
8851  -27.05 -0.64 -86.49   -197.52 -1.08 -236.36   0.00 0.00 0.00   0.00 0.00 0.00
8951  -27.05 -0.57 -87.78   -197.53 -1.13 -244.17   0.00 0.00 0.00   0.00 0.00 0.00

19802 -259.32 0.78 -0.66
9050  -203.31 -0.62 -361.23   170.90 -1.14 204.84   0.00 0.00 0.00   0.00 0.00 0.00
9154  -203.32 -0.57 -370.71   170.91 -1.18 211.98   0.00 0.00 0.00   0.00 0.00 0.00
9254  -203.33 -0.88 -379.36   170.91 -0.06 217.49   0.00 0.00 0.00   0.00 0.00 0.00
9354  -203.34 -1.06 -388.21   170.92 0.48 223.66   0.00 0.00 0.00   0.00 0.00 0.00
9453  -203.35 -1.11 -397.25   170.92 0.53 230.42   0.00 0.00 0.00   0.00 0.00 0.00

23040 -194.56 0.14 1.02
9553  -27.05 -1.10 -133.97   -197.49 0.54 -219.60   0.00 0.00 0.00   0.00 0.00 0.00
9657  -27.05 -1.12 -135.16   -197.50 0.55 -227.79   0.00 0.00 0.00   0.00 0.00 0.00
9757  -27.05 -0.91 -136.64   -197.51 -0.55 -234.36   0.00 0.00 0.00   0.00 0.00 0.00
9857  -27.05 -0.78 -138.03   -197.52 -1.00 -241.69   0.00 0.00 0.00   0.00 0.00 0.00
9956  -27.05 -0.74 -139.28   -197.53 -1.05 -249.51   0.00 0.00 0.00   0.00 0.00 0.00
10056  -27.05 -0.76 -140.42   -197.54 -1.10 -257.31   0.00 0.00 0.00   0.00 0.00 0.00
10157  -27.05 -0.73 -141.66   -197.55 -1.06 -265.23   0.00 0.00 0.00   0.00 0.00 0.00
10257  -27.05 -0.72 -142.85   -197.56 -1.08 -273.08   0.00 0.00 0.00   0.00 0.00 0.00
10356  -27.06 -0.71 -144.06   -197.57 -1.08 -280.95   0.00 0.00 0.00   0.00 0.00 0.00
10460  -27.06 -0.70 -145.30   -197.58 -1.10 -289.03   0.00 0.00 0.00   0.00 0.00 0.00
[redigeeri] N&auml;dal 21.-26. november

[redigeeri]21. november


V&auml;ravas olev pall on pall
Raimond: Leidsin Arduino seest &uuml;he delay, mis muutis k&auml;skude vastuv&otilde;tmise aeglaseks. Tegin delay v&auml;ga v&auml;ikseks. Samuti parandasin &auml;ra selle, et pildit&ouml;&ouml;tlus ei t&ouml;&ouml;tleks juba t&ouml;&ouml;deldud kaadrit.
&Uuml;ks pildit&ouml;&ouml;tluses olev mure on pallide leidmine v&auml;ravast.
Testisin v&auml;ljakul. Hetkel tundub olevat probleem seinte otsa ja/v&otilde;i v&auml;ravasse s&otilde;itmine.
[redigeeri]Eelv&otilde;istlus (24. november)
Raimond: Tegime enne eelv&otilde;istlust terve p&auml;eva testimist robotiga. M&auml;&auml;rasin valgebalanssi ja muid kaamera parameetreid. Sai tehtud kaks eraldi seadete skripti p&auml;evase ja &otilde;htuse aja jaoks.
Suur mure oli l&ouml;&ouml;gimehhanismi s&uuml;damiku k&uuml;lge k&auml;iv n&ouml;&ouml;r + kumm. Nimelt l&auml;ks n&ouml;&ouml;r katki ja kumm oli pandud selliselt, et ainult n&ouml;&ouml;r hoiaks s&uuml;damikku pesast v&auml;lja lendamast. K&auml;isin ostsin kingapaelu ja T&otilde;nisele meenus, et kingapaelte sees on veel omakorda v&auml;iksem pael. Kingapael tervikuna oli v&auml;ga j&auml;me ja libe ning ei kinnitunud eriti h&auml;sti s&uuml;damiku k&uuml;lge, seega l&otilde;ikasime pealmise katte &auml;ra ja &uuml;ritasime seal sees olevat n&ouml;&ouml;ri s&uuml;damiku k&uuml;lge siduda. Kahjuks l&auml;ks too ka katki (t&otilde;en&auml;oliselt, kuna kinnituse juures oli &uuml;ks peenike - kuid mitte eriti terav - &auml;&auml;r, mis r&otilde;hus t&otilde;en&auml;oliselt n&ouml;&ouml;rile). Proovisime kinnitada veel vasksukaga s&uuml;damikku, kuid see purunes p&auml;rast teist l&ouml;&ouml;ki. L&otilde;puks tegime nii, et panime kummi topelt ja h&auml;sti pingul olevalt ning tundus, et see oli hea n&ouml;&ouml;ri puudumise korral parim lahendus.
Eelv&otilde;istlusele kahjuks ETV tulla ei saanudki, seega esinesime Mihkel Pajusalu kaamerale ja T&otilde;nis tegi ka videoid. Teised robotid ei tundunud &uuml;kski eriti heal j&auml;rjel olevat ning t&otilde;en&auml;oliselt oleksime v&otilde;itnud, kui ma poleks unustanud kahel korral valida vastase v&auml;ravat kasutajaliidesest ning olekumasina enda taimer oleks Lubuntu all t&ouml;&ouml;tanud.
Nende kahe tekkinud probleemi lahendamiseks progresin p&auml;rast eelv&otilde;istlust juurde vahetuma taimeri ja v&auml;rvisin kasutajaliideses v&auml;ravate nupud eriv&auml;rvi, et need oleksid rohkem m&auml;rgatavad. Mainisin ka meeskonnaliikmetele, et roboti k&auml;ivitamise juures peaksime k&otilde;ik juures olema ja &uuml;ksteist kontrollima.
Palli l&ouml;&ouml;mise olekumasina oleku konfiguratsioon:
stateMachine.Configure(State.FindingGoal)
 .Permit(Trigger.CoilgunMustLaunch, State.LaunchingBall)
 .Permit(Trigger.BallLost, State.LookingForBall)
 .Permit(Trigger.Timeout, State.LookingForBall)
 .Permit(Trigger.PoweredDown, State.Idle)
 .Permit(Trigger.StartLedsMode, State.LedsMode)
 .Permit(Trigger.WallClosingIn, State.EscapeTheWall)
 .Ignore(Trigger.CameraLockedOnBall)
 .OnEntry(() =>
  {
   //This timer works works
   goalTimeoutTimer = stopwatch.ElapsedMilliseconds + goalFindingTimeout;
   LogicState.FindingGoal = true;
   //StartTimer(5000, LaunchBall); //-Does not work
   coilgunLaunchTime = stopwatch.ElapsedMilliseconds;
   Commander.SetColors(Colors.Magenta);
  })
 .OnExit(() =>
  {
   LogicState.FindingGoal = false;
   StopTimer();
  });


V&auml;rava leidmise algoritmid
Peale selle oli mureks ka veebikaamera USB &uuml;henduse katkemine. Arduino USB-i katkemise probleemi lahendasin m&otilde;ned n&auml;dalad tagasi &auml;ra, kuid kaamerapildi katkemise probleemi lahendamisega me tarkvaraliselt hakkama ei saanud. Leevendust probleemile andis kaamera &uuml;hendamine r&uuml;peraali parempoolsesse USB pessa, mis on m&otilde;nev&otilde;rra tihkem kui vasakpoolsemad.
Veel &uuml;ks oluline viga oli v&auml;rava tuvastuse juures see, et millal me anname signaali, kui v&auml;rav on ees ning me v&otilde;ime palli v&auml;ravasse l&uuml;&uuml;a. Eelnevalt olime teinud algoritmi, mis kontrollib, kas v&auml;rava vasak &auml;&auml;r on pildi keskteljest vasakul ning parem &auml;&auml;r paremal. Selle probleem oli see, et p&auml;ris tihti l&otilde;i robot vastu v&auml;rava posti ja pall p&otilde;rkas sealt v&auml;lja. Lahenduseks tegin algoritmi, mis leiab v&auml;rava vasaku ja parema &auml;&auml;re x-kordinaatide j&auml;rgi v&auml;rava tsentri (v&otilde;ttes aritmeetilist keskmist) ning kontrollib, kas v&auml;rava tsenter on pildi keskteljest ~30 piksli kaugusel.


Seina leidmise illustratsioon
Marti poolt sai tehtud ka seinte tuvastuse algoritm, mis kontrollib kahest punktist kaamerapildil &uuml;lesse poole j&auml;&auml;vaid 50 pikslit ja &uuml;ritab leida nende hulgas alt poolt lugedes v&auml;hemalt 15 halli, 20 valget ja &uuml;he rohelise piksli. Eelv&otilde;istlusel t&ouml;&ouml;tas too v&auml;ga h&auml;sti, kuid Robotexil mitte niiv&auml;ga. Nimelt oli Robotexil &uuml;ks sein hulga valgem kui Digilabori oma ja t&otilde;en&auml;oliselt ei suudetud nii palju halle piksleid sealt leida.
Panin veel robotile peale ka buzzeri, et teada saada kuulmise j&auml;rgi teatud olukordadest. Robotexi ajal sai juurde tehtud veel &uuml;ks olukord ja seega l&otilde;plikud olukorrad j&auml;id sellised:
M&auml;ngu alguses g&uuml;ro kalibreerimine - 75% buzz, ~5-6 sek
Enne l&ouml;&ouml;gimehhanismi k&auml;ivitamist - 100% buzz, 500 ms
90 sekundi m&ouml;&ouml;dumisel algusest v&otilde;i eelmisest m&ouml;&ouml;dumisest - 100% buzz, 1 sek
Vahepeal programmeeriti buzzer &uuml;mber g&uuml;ro kalibreerimise ajal madalama j&otilde;udlusega heli tekitama ja kuna buzzer oli n&otilde;rk ja vigane, siis madalama j&otilde;udlusega ei suutnud ta liiga kuuldavat heli teha ning Robotexi ajal l&uuml;litasin kogemata liiga vara roboti k&auml;ima. Enne l&ouml;&ouml;mist k&otilde;lav heli oli testimise ajal m&auml;rgu andmiseks, et n&uuml;&uuml;d ei tasu roboti ette astuda. Ning 90 sekundi lugemine oli selleks, et j&auml;lgida jooksvalt mitu palli &uuml;he raundiga me sisse saaksime.


Kui v&auml;ravat valitud pole, on t&auml;helepanu t&otilde;mbav punane


Kollane v&auml;rav on kollane


Sinine v&auml;rav on sinine


Kaamera parameetrite seadistamine pildi j&auml;rgi


Kaamerapilt on kokku jooksnud p&auml;rast kokkup&otilde;rget
[redigeeri]Robotex (26.-27. november)


Ekraanipilt oli suurem ja n&auml;gin paremini kaamera parameetreid
Raimond: Robotexile l&auml;ksime reede &otilde;htul. T&otilde;nis pani reede hommikul LiPo-d veel laboris laadima ja k&auml;isin t&otilde;in need enne minekut &auml;ra. Buss oli juba l&auml;inud ja Janno meeskond veel nokitses roboti kallal seal. S&otilde;idul Tallinna poole helistas Harti ja r&auml;&auml;kisime roboti osas &uuml;ht-test l&auml;bi. Organiseerisime Ahti k&auml;est varukondeka palli l&ouml;&ouml;gimehhanismi tarvis, kuigi reaalsuses me seda &auml;ra ei vahetanudki ja olemasolev kondekas t&ouml;&ouml;tas h&auml;sti.
J&otilde;udes Tallinna oli t&ouml;&ouml; TT&Uuml; spordihoones juba t&auml;ies hoos. Sain k&auml;epaela ja l&auml;ksin laua juurde, kus oli meeskonna number 12 kirjas. Hiljem selgus, et tegu oli joonej&auml;lgijate numbriga, kuid keegi meid sealt &auml;ra ajama ei tulnud reede &otilde;htul. Marti tuli ka appi ja koos tegelesime kaamera parameetrite seadistamise ja GUI-s v&auml;rviliste (rohkem t&auml;helepandavamate) nuppude loomisega.
Marti n&auml;itas, kuidas saada Ordi r&uuml;peraali v&auml;iksest ekraanist suur, mis hiirega ekraani &auml;&auml;rele minnes edasi liigub. Sellest oli palju kasu, sest Digilaborist teiste poolt kaasa v&otilde;etud suurel monitoril puudus VGA-kaabel.
Reede &otilde;htul p&otilde;les meil selle aasta esimest korda komponent roboti peal l&auml;bi. Nimelt LiPo indikaatori plaat, mis seni oli h&auml;sti t&ouml;&ouml;tanud, l&auml;ks leegiga p&otilde;lema, kui Marti pani n&auml;pu rulliku vastu. Teooriaid l&auml;bip&otilde;lemise kohta on mitmeid. Ise pakkusin v&auml;lja, et &auml;kki vihmase ilmaga robotit autost spordihoonesse viies sattus plaadile termor&uuml;&uuml;ži vahele kondensi, mis tekitas l&uuml;hise. Harti arvas, et roboti pealmise plaadi peale oli kogunenud staatilist elektrit. Mihkel Pajusalu ei osanud midagi v&auml;ita. T&otilde;en&auml;oliselt aitasid l&uuml;hisele kaasa t&auml;iesti t&auml;is laetud LiPo ja rulliku p&ouml;&ouml;rlemise takistamisest tekkiv pinge.
Laup&auml;eva p&auml;eval toimus suur osa tegevusest TT&Uuml; aulas. Marti tegi objektide tuvastuse &uuml;mber hue-kanali pealt leidmise peale, kuna RGB vahemike m&auml;&auml;ramise juures oli kerge vigu tekkima ning too n&otilde;uaks head kompetensi v&auml;rvide kolmest kanalist moodustamise kohta. Kogemus n&auml;itas, et meil see teema p&auml;ris kodus ei ole. Hue j&auml;rgi leidmine osutus k&uuml;ll natukene aeglasemaks v&otilde;rreldes esialgse pildit&ouml;&ouml;tlusega, kuid suutsime v&auml;rve t&auml;psemalt tuvastada. Pallid ei olnud enam alt varjust ja &uuml;levalt valgustatud poolelt mitte-tuntavad.
Selline l&auml;henemine v&otilde;imaldas mul m&auml;&auml;rata pallide leidmisel kitsama tingimuse &uuml;marusele (~0.3 -> 0.75), mis aitas veel t&auml;psemini leida palle ja filtreerida v&auml;lja v&auml;ljakust v&auml;ljapoole j&auml;&auml;vad &uuml;htlased oranžid alad nagu TT&Uuml; aula p&otilde;rand.
Tol momendil sai ka koos T&otilde;nisega tehtud eelpool mainitud buzzeri helistamine g&uuml;roskoobi kalibreerimise ajal. T&otilde;nis ja laup&auml;eva &otilde;htul tulnud Harti tegelesid veel g&uuml;roskoobi nurga imeliku muutumisega v&otilde;istluse ajal. Nimelt juhtus m&otilde;nikord, et p&auml;rast 90 sekundit m&auml;ngimist arvas robot, et 0-kraadi suund on reaalse ~300 kraadi suuna poole ja ei osanud enam &otilde;igest kohast v&auml;ravat otsida.
Sirvisime veidi kaasa v&otilde;etud robootika alast raamatut (nimi ununenud, t&auml;iendan hiljem), kus kahjuks oli ainult kirjas mehaanilistest ja optilistest g&uuml;roskoopidest. Meil aga oli elektrooniline. Arvasime, et t&otilde;en&auml;oliselt v&otilde;is viga olla selles, et v&auml;ljaku pind ei ole &uuml;htlane - jooned on natuke k&otilde;rgemad alad muust - ning selle t&otilde;ttu ei p&uuml;si robot tasasel pinnal, vaid liigub ka z-telge pidi. Selline liikumine aga ajab g&uuml;roskoobi lugemi sassi. T&otilde;nis ja Harti leidsid sellele lahenduse, kuid millise t&auml;pselt, seda mina hetkel ei tea...


60 FPS-i peal (Pixelformat=1) on kaamerapilt v&auml;ga hea
Laup&auml;eva &otilde;htul &uuml;ritasime Martiga lahendada probleemi, et saada kaamera FPS 60 peale. Kaamera seda v&otilde;imaldas ning V4L2-st oli v&otilde;imalik seda ka seadistada, kuid kahjuks meie OpenCV wrapper-teek EmguCV initsialiseeris kaamera uuesti ning algv&auml;&auml;rtustas k&otilde;ik parameetrid. Teiste parameetrite muutmisega saime programmi k&auml;imasolemise ajal shelli skripti k&auml;ivitamisega hakkama, kuid reaalset resolutsiooni ja pixelformatit (m&auml;&auml;rab FPS-i) me enam muuta ei saanud - visati veateade, et kaamera on juba kasutuses.
EmguCV enda SetCaptureProperty() funktsioonid kahjuks ei t&ouml;&ouml;tanud. Tegu on dokumenteeritud bugiga number 42. Mingist versioonist alates on v&otilde;imalik m&auml;&auml;rata k&uuml;ll kaamerapildi laiust ja k&otilde;rgust, kuid FPS-i v&otilde;i muude parameetrite m&auml;&auml;ramise peale antakse ikka veateade ja ei tehta midagi.
P&otilde;hjus kaamerapildi 60 FPS-i peale saamiseks oli see, et olemasoleva 30 korral l&auml;hevad roboti p&ouml;&ouml;ramise ajal pallid v&auml;ga uduseks. Samuti l&auml;ks v&auml;ga uduseks n&auml;iteks k&auml;si, mida kaamera ees liigutada. 60 FPS-iga testides seda ei juhtunud. Uduseks l&auml;inud palle kaotab CamShift algoritm &auml;ra ning sellest l&auml;htuvalt kaotab neid ka robot &auml;ra ning v&otilde;ib s&otilde;ita/p&ouml;&ouml;rata korraks n&auml;htud pallist m&ouml;&ouml;da ja kulutada selle peale palju aega.


Videopildi voo lugemisel ilmnes veider m&uuml;ra
Kulutasime enamiku laup&auml;eva &ouml;&ouml;st selle peale &auml;ra ja kahjuks ei saanudki korralikult seda k&auml;ima. &Uuml;he esimese lahendusena tulime Martiga koos sellisele ideele, et tekitada kaamerast mingi muu programmiga stream, mida meie roboti programm loeks. Tolles streami lugemise ja saatmise programmis m&auml;&auml;raksime &auml;ra, et v&otilde;ta n&uuml;&uuml;d 60 kaadrit sekundis ning t&otilde;en&auml;oliselt saaks siis ka roboti programm selliselt selle k&auml;tte.
K&otilde;ik oli enam-v&auml;hem h&auml;sti ning Javascriptiga veebilehel streamitud pilt oli p&auml;ris hea. Kuid kui me &uuml;ritasime pilti lugeda m&otilde;ne muu tarkvaraga (roboti programm, VLC), siis tekkis pildile v&auml;ga veider m&uuml;ra alati. Pilt oli k&uuml;ll kiire ja t&otilde;en&auml;oliselt 60 FPS, kuid m&uuml;ra t&otilde;ttu ei saanud me seda kuskil kasutada.
P&uuml;hap&auml;eval avastasime, et on olemas selline V4L draiver nagu vloopback, mis peaks teoorias tegema just seda, mida me tahame. Kahjuks aeg surus peale ning me ei saanud sedagi korralikult k&auml;ima. Kaamera FPS j&auml;i kahjuks 30 peale ning CamShift algoritm pidi tollega leppima.
P&uuml;hap&auml;eva hommikul otsustasime, et tegeleme enne muude probleemidega ja tuleme kaamera FPS-i juurde tagasi, kui aega &uuml;le j&auml;&auml;b. Muud probleemid videot&ouml;&ouml;tluse osas olid:
Kaamerapilt jooksis endiselt kokku kui USB korraks &auml;ra katkes
Me ei olnud veel implementeerinud tee v&auml;ravani vaba olemise tuvastust (kas v&otilde;ib l&uuml;&uuml;a v&auml;ravasse?)
TT&Uuml; aulas olid v&auml;ljaku seinad v&auml;ga valged ja seinatuvastuse algoritm ei saanud &uuml;he seina juures hakkama (selgus meile p&auml;rast paari m&auml;ngu)
Samal ajal parandasid T&otilde;nis ja Harti meie PID-kontrolleri parameetreid, et liikumine oleks sujuvam ja kiirem. Jutu j&auml;rgi &otilde;nnestus neil liikumise kiirust t&otilde;sta, kuid liiga suurt vahet ma ise ei m&auml;rganud.
Liikumise osas oli veel see probleem, et robot v&otilde;is kohati v&auml;ljakul olevate joonte peale kinni j&auml;&auml;da, kui ta nendel seisma j&auml;i. Teatud asendis ja teatud liikumisk&auml;suga ei suutnud ta enam sealt ennast lahti rebida. &Uuml;ritasin teha algoritmi, mis j&auml;lgiks, et kui paar sekundit p&auml;rast liikumisk&auml;su saatmist ei ole roboti kordinaat ega nurk muutunud, siis saadetaks kerge p&ouml;&ouml;ramisk&auml;sk ja proovitaks uuesti. Kahjuks j&auml;llegi ajanappuse t&otilde;ttu j&auml;i see pooleli. Alustasin k&uuml;ll asjaga, kuid esimeses versioonis ei t&ouml;&ouml;tanud see nii nagu vaja ja otsustasime, et olgu parem ilma.
Konfigureerisin veidi muid liikumisk&auml;ske, n&auml;iteks vastase v&auml;rava juurest rohkem tagasi p&ouml;&ouml;ramist (enne p&ouml;&ouml;ras ainult natuke ja j&auml;i vastase v&auml;ljakupoolele palle otsima). Samuti v&auml;hendasin palliga vastase v&auml;rava juures tagurdamise aega (enne tagurdas liiga palju).
M&otilde;nel juhul juhtus, et robot kaotas palli &auml;ra rulliku k&uuml;ljest, seega Harti k&auml;is j&auml;rjepidevalt rullikut niiske lapiga &uuml;le t&otilde;mbamas.


L&ouml;&ouml;gitrajektoor vaba?
Tulles tagasi pildit&ouml;&ouml;tluse juurde, siis Martil &otilde;nnestus realiseerida algoritm, mis tuvastab, kas roboti ees olev tee on l&ouml;&ouml;giks vaba. Selleks t&otilde;mbasime me alguses &uuml;he, seej&auml;rel kaks ja l&otilde;puks kolm pikslirida pildi alt &auml;&auml;rest umbes 2/5 peale pildist. Nendel piksliridadel otsisime oranži kanali pealt valgeid alasi ja leidumise korral &uuml;tlesime, et tee ei ole vaba.
&Uuml;he pikslireaga j&auml;id m&auml;rkamata pallid, mis olid natukene keskteljest k&otilde;rval, kuid endiselt l&ouml;&ouml;gitrajektooril. Kahe pikslireaga v&otilde;is juhtuda, et pall j&auml;i t&auml;pselt nende ridade vahele. Kolm oli optimaalne.
Eesm&auml;rk sellise kontrolli tegemiseks oli see, et umbes 40%-l m&auml;ngudest juhtus l&ouml;&ouml;k, mis eba&otilde;nnestus, kuna m&otilde;ni teine pall j&auml;i ette, l&ouml;&ouml;dud pall p&otilde;rkas selle vastu ja m&otilde;lemad l&auml;ksid m&ouml;&ouml;da. T&otilde;si, antud algoritm ei ole ideaalne, sest tegelikult ei kontrollita teed v&auml;ravani, vaid ainult mingit osa roboti ees... Siiski kiire lahendusena Robotexi hommikul asi sobis. Suutsime t&otilde;en&auml;oliselt 60% tekkinud probleemsetest olukordadest v&auml;ltida.
V&otilde;istlused M&auml;ngisime kokku neli v&otilde;istlust:
Vastane: Siil - Tollel v&otilde;istlusel juhtus paar &auml;pradust ja v&otilde;itsime suht koba peale. P&auml;rast esimest vooru otsustas r&uuml;peraal ennast v&auml;lja l&uuml;litada. Tagasi sisse l&uuml;litamisel sain aru, et r&uuml;peraali aku oli t&uuml;hi. Kuna aeg surus j&auml;lle peale, siis otsustasin proovida kohe-kohe t&uuml;hjaks saava akuga v&otilde;istelda. R&uuml;peraal &otilde;nneks selle 90 sekundi jooksul &auml;ra ei surnud, kuid paanikas ning n&otilde;rgestatud heliga buzzeri j&auml;rgi l&uuml;litasin ekslikult roboti g&uuml;roskoobi kalibreerimise ajal sisse. Selle peale hakkas robot s&otilde;itma viltu ning isegi oli juba otsapidi oma v&auml;ravas. &Otilde;nneks (v&otilde;i kahjuks) pudenesid vastase robotilt Siilil &auml;ra okkad (punaseks v&auml;rvitud kruvid) ning voor loeti meie kasuks.
Viimase voori ajaks laenas T&otilde;nis Team Spiriti k&auml;est nende akut (k&uuml;ll on hea, et mitu meeskonda kasutavad samasuguseid r&uuml;peraale) ning siis esinesime edukalt.
Vastane: Peeter - V&otilde;istlus Peetriga oli meil esimene kaotus. Robot k&uuml;ll &uuml;ritas nii kiiresti palle leida ja sisse l&uuml;&uuml;a kui suutis, ent udune kaamerapilt, pallide kaotamine ning kohati liiga palju aega v&otilde;ttev pallideni s&otilde;itmine (et ta jumala eest pallini s&otilde;ites teda uuesti pildilt &auml;ra ei kaotaks), pakkusid robotile liiga suurt takistust. Peeter oli lihtsalt t&auml;psem ja kiirem.
Vastane: Beetle - Beetle lubas meil kasutada valgustust, seega minu meelest oli too v&otilde;istlust meie poolt ehk teistele k&otilde;ige meeldej&auml;&auml;vam.
Vastane: ??? - Hetkel ei meenu mulle viimase vastase nimi, kuid kaotasime neile samadel p&otilde;hjustel, mis Peetri puhulgi.



Robin vs Siil


Robin vs Siil


Robin vs Peeter


Robin vs Peeter


Meeskond Sidi


Robin vs Beetle


Robin vs Beetle


Robin vs ???


Meeskond Sidi


Meeskond Sidi
Fotod Kristel Sergo
</body>
</html>